[MySQL 3.23.X] Suche nach meheren Einträgen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 3.23.X] Suche nach meheren Einträgen

    Hi,

    möchte folgende Abfrage machen:

    SELECT *
    FROM bestellungen
    LEFT JOIN fragen_antworten fa
    USING ( id_bestellungen )
    WHERE plz
    LIKE '6%' AND fa.id_antworten =27 AND fa.id_antworten =29 LIMIT 0 , 30

    Daten der Tabelle fragen_antworten:
    CREATE TABLE `fragen_antworten` (
    `id_bestellungen` int(10) unsigned NOT NULL default '0',
    `id_fragen` int(10) unsigned NOT NULL default '0',
    `id_antworten` int(10) unsigned NOT NULL default '0'
    ) TYPE=MyISAM;
    INSERT INTO `fragen_antworten` VALUES (1, 6, 27);
    INSERT INTO `fragen_antworten` VALUES (1, 6, 29);
    INSERT INTO `fragen_antworten` VALUES (1, 3, 12);
    INSERT INTO `fragen_antworten` VALUES (3, 7, 31);
    INSERT INTO `fragen_antworten` VALUES (3, 6, 29);

    In der Tabelle bestellungen möcht ich z.B. nach dem PLZ Gebiet 6 suchen (Daten sich nicht wichtig. Soll nur ein Beispiel sein woher ich die id_bestellungen bekomme). Alle die in dem PLZ Gebiet leben und die Antworten 27 UND 29 gegeben haben, möchte ich als Suchergebniss bekommen.

    Problem ist das ich natürlich nicht nach AND suchen kann:
    fa.id_antworten =27 AND fa.id_antworten =29
    Da MySQL ja pro Zeile sucht.
    OR geht auch nicht, da ich ja sonst auch bestellungen ausgegeben bekomme wo nur die Antwort 29 oder 27 gegeben wurde.

    Wie könnte ich dieses Problem nun lösen? Ist das überhaupt in einem Query lösbar? Oder muß ich mehrere machen?



    ..... die Anzahl der Fragen und Antworten ist komplett dynamisch.....



    P.S es muß möglich sein auch nach mehreren oder wenigeren Antworten zu suchen
    Zuletzt geändert von Sebastian W; 16.06.2004, 13:03.
    Grüsse,
    Sebastian


    Profil Flex Freelancer
    Twitter twitter.com/flashhilfe
    Web Flash und Flex Community

  • #2
    LIKE '6%' AND (fa.id_antworten =27 OR fa.id_antworten =29 ) ????

    Kommentar


    • #3
      Wie gesagt:
      -------------
      Problem ist das ich natürlich nicht nach AND suchen kann:
      fa.id_antworten =27 AND fa.id_antworten =29
      Da MySQL ja pro Zeile sucht.
      OR geht auch nicht, da ich ja sonst auch bestellungen ausgegeben bekomme wo nur die Antwort 29 oder 27 gegeben wurde
      --------------
      Grüsse,
      Sebastian


      Profil Flex Freelancer
      Twitter twitter.com/flashhilfe
      Web Flash und Flex Community

      Kommentar


      • #4
        OK jetzt hab' ich's geblickt.
        Wie wärs mit filtern und zählen?
        Wenn die Anzahl der gefundenen=Anzahl im Filter ist alles da:

        select
        count(distinct id_antworten) as anzahl,
        id_bestellungen
        from fragen_antworten
        where
        id_antworten =27 OR id_antworten =29
        group by id_bestellungen
        having anzahl=2

        PS: Mit Deinem Beispiel-Create & Insert geht das Testen echt locker flockig

        Kommentar


        • #5
          Genau so hab ich es jetzt auch umgesetzt. Mir fiel auch nichts anderes ein.

          SELECT id_bestellungen,COUNT(id_bestellungen) AS num FROM fragen_antworten WHERE id_antworten = 27 OR id_antworten = 29 GROUP BY id_bestellungen

          Danke für deine Antwort!

          >> PS: Mit Deinem Beispiel-Create & Insert geht das Testen echt locker flockig
          Na, so etwas gehört doch eigentlich immer dazu


          Noch ne Frage, warum distinct und was macht das having anzahl=2?
          Grüsse,
          Sebastian


          Profil Flex Freelancer
          Twitter twitter.com/flashhilfe
          Web Flash und Flex Community

          Kommentar


          • #6
            Habs grad nachgelesen: http://www.tbee.de/mysql/p4_having_funktionen.php

            Das ist ja praktisch... HAVING kannte ich noch gar nicht.

            Viele Dank!
            Grüsse,
            Sebastian


            Profil Flex Freelancer
            Twitter twitter.com/flashhilfe
            Web Flash und Flex Community

            Kommentar


            • #7
              Mit dem HAVING bekommst Du nur "richtige".

              Der distinct war zur Sicherheit falls id_antworten pro id_bestellungen nicht unique ist, z.B.

              id_bestellungen,id_fragen,id_antworten
              1, 8, 27

              Sonst wirkt er sich nicht aus.

              Kommentar


              • #8
                Das DISTINCT ist leider falsch, sonst zählt der COUNT nicht mit. Aber ansonsten klappts jetzt ganz wunderbar.

                Danke noch mal.
                Grüsse,
                Sebastian


                Profil Flex Freelancer
                Twitter twitter.com/flashhilfe
                Web Flash und Flex Community

                Kommentar


                • #9
                  Original geschrieben von Sebastian W
                  Das DISTINCT ist leider falsch, sonst zählt der COUNT nicht mit.
                  Probier's lieber 'mal aus sonst stimmt der HAVING auch nicht...

                  Kommentar


                  • #10
                    Hatte es getestet. Macht für mich auch Sinn warum es da nicht stehen darf:

                    SELECT id_bestellungen,COUNT(id_bestellungen) AS num FROM fragen_antworten WHERE id_antworten = 27 OR id_antworten = 29 GROUP BY id_bestellungen HAVING num = 2

                    id_bestellungen num
                    1 2



                    SELECT id_bestellungen,COUNT(DISTINCT id_bestellungen) AS num FROM fragen_antworten WHERE id_antworten = 27 OR id_antworten = 29 GROUP BY id_bestellungen HAVING num = 2

                    Kein Ergebnis. num kann ja maximal nur 1 sein wegen dem DISTINCT
                    Grüsse,
                    Sebastian


                    Profil Flex Freelancer
                    Twitter twitter.com/flashhilfe
                    Web Flash und Flex Community

                    Kommentar


                    • #11
                      Du hast ja auch: COUNT(id_bestellungen)
                      Ich hab : count(distinct id_antworten)
                      wegen where id_antworten=....

                      Die Logik dazu: der Filter geht auf id_antworten,
                      wieviele id_antworten haben es geschafft?

                      Kommentar


                      • #12
                        Ups, verlesen.

                        Ich dachte man nimmt das was man auch beim GROUP BY verwendet hat. GROUP BY id_bestellungen HAVING num = 2

                        Müßte doch auch korrekt sein.... dann kann ich mir das DISTINCT sparen
                        Grüsse,
                        Sebastian


                        Profil Flex Freelancer
                        Twitter twitter.com/flashhilfe
                        Web Flash und Flex Community

                        Kommentar


                        • #13
                          Wenn Du keinen distinct im count hast,
                          ist es völlig egal welche Spalte Du in den Count schreibst.
                          Das ist vielen nicht klar (da wird halt dann irgendwas reingeschrieben...).
                          Ohne distinct kann man auch count(*) schreiben.
                          Die unterschiedlichen Spalten haben ja alle gleich viel Zeilen.
                          Zwingend logisch, oder?

                          Mach doch 'mal in die Test-Tabelle DEN Datensatz rein:

                          INSERT INTO `fragen_antworten` VALUES (1, 8, 27);

                          Dann fliegt die Bestellung 1 in Deinem Query raus,
                          obwohl nur Antworten 27 und 29 vorkommen.
                          Aber 27 nicht einmal sondern 2x!

                          Kommt halt darauf an ob es den Fall in Deiner DB gibt,
                          mit count(distinct id_antworten) funktioniert es halt auch in diesem Fall.

                          Kommentar


                          • #14
                            >> INSERT INTO `fragen_antworten` VALUES (1, 8, 27);
                            Das kommt bei mir nicht vor.

                            Hab ne Tabelle mit allen Antworten. Also unique ID.

                            Danke noch mal.
                            Grüsse,
                            Sebastian


                            Profil Flex Freelancer
                            Twitter twitter.com/flashhilfe
                            Web Flash und Flex Community

                            Kommentar

                            Lädt...
                            X