Sortierung

  • Hallo zusammen,

    ich habe zwei Tabellen (Information, Reklamation), die beide identisch aufgebaut sind:

    ID Beschreibung Autor
    ID Beschreibung Autor

    Ich möchte jetzt nach einem Begriff in "Beschreibung" in beiden Tabellen suchen und die Ausgabe sortiert nach der ID haben. Zum Beispiel

    1 Beschreibungstext Autor (aus Information)
    1 Beschreibungstext Autor (aus Reklamation)
    2 Beschreibungstext Autor (aus Reklamation)
    3 Beschreibungstext Autor (aus Information)
    3 Beschreibungstext Autor (aus Reklamation)

    Ich tue mich noch schwer mit Group, Join, etc., ich weiss nie, wann ich was wie einsetzen muss. Ich würde mich sehr über eine funktionierende Abfrage freuen.

    Danke
    Ralf

  • Versucht habe ich

    PHP
    $abfrage = "select 
                   information.id, reklamation.id, information.beschreibung, reklamation.beschreibung 
                from 
                  reklamation, information 
                where 
                  reklamation.beschreibung like '%$suchbegriff%' or information.beschreibung like '%$suchbegriff%' 
                order by 
                  reklamation.id, information.id";


    dabei kommt aber leider nicht das raus was ich gerne hätte, sondern phpmyadmin liefert mir sowas

    1 beschreibung 3 beschreibung
    1 beschreibung 4 beschreibung
    1 beschreinung 5 beschreibung
    etc.

  • Bei deinem Statement verbindest Du 2 Tabellen ohne sie wirklich miteinander zu verbinden und suchst auch noch in beiden nach dem selben Begriff. Daher liefert dir MySQL dann eine Ergebnismenge in der jeweils von beiden Tabellen "irgendein" Datensatz enthalten ist.

    Was Du suchst ist UNION. Beispiel:

    PHP
    $abfrage = "(SELECT a FROM t1 WHERE beschreibung like '%".mysql_escape_string($suchbegriff)."%')
    UNION
    (SELECT a FROM t2 beschreibung like '%".mysql_escape_string($suchbegriff)."%')
    ORDER BY a";

    Siehe Handbuch: http://dev.mysql.com/doc/refman/5.0/en/union.html

  • SUPER! DANKE!!!

    Aber schon habe ich das nächste Problem. In einer weiteren Tabelle (ID, Ursache, Loesung) habe ich Datensätze, die ich ebenfalls so ausgelesen habe:

    PHP
    $abfrage = "(SELECT id, beschreibung FROM information WHERE beschreibung like '%$suchbegriff%')
                 UNION
                (SELECT id, ursache, loesung FROM fehler where ursache like '%$suchbegriff%')
                ORDER BY id";


    Das liefert dann die Fehlermeldung:

    Zitat

    The used SELECT statements have a different number of columns


    Die Fehlermeldung ist soweit ja klar, aber wie kann ich das lösen? Hättest du da auch eine Idee?

    Hast mir auf jeden Fall schon sehr weiter geholfen, nochmal danke!

    PS: mysql_real_escape_string ist schon auf den Suchbegriff angewendet worden

  • Schaffe dir einfach eine "Pseudospalte". Also:

    PHP
    $abfrage = "(SELECT id, beschreibung, '' as placebo FROM information WHERE beschreibung like '%$suchbegriff%')
                 UNION
                (SELECT id, ursache, loesung FROM fehler where ursache like '%$suchbegriff%')
                ORDER BY id";

    Wenn Du außerdem noch die Ergebnismenge sortieren willst, solltest Du einheitliche Spaltennamen per Alias erzwingen. Also:

    PHP
    $abfrage = "(SELECT id, '' as text, beschreibung FROM information WHERE beschreibung like '%$suchbegriff%')
                 UNION
                (SELECT id, ursache as text, loesung as beschreibung FROM fehler where ursache like '%$suchbegriff%')
                ORDER BY beschreibung";