WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   [php] mysql verknüpfte abfrage (http://www.wcm.at/forum/showthread.php?t=151036)

mqs 22.11.2004 13:31

[php] mysql verknüpfte abfrage
 
hi
ich glaub ich habe einen kleinen denkfehler bezügl. dieser ausgabe:
habe 2 tables die über die kunde_id verknüpft sein sollen.
nun will ich ne suchausgabe machen. mein derzeitiger befehl sieht so aus:

PHP-Code:

    $suchstring="SELECT $db_kunden.*, $db_kontakt.*, $db_kunden.kunde_id AS id FROM $db_kunden
        LEFT JOIN $db_kontakt ON $db_kunden.kunde_id = $db_kontakt.kunde_id
        WHERE 
        (
        $db_kunden.kunde_firmenname LIKE '%$stichwort%' OR 
        $db_kunden.kunde_vorname LIKE '%$stichwort%' OR 
        $db_kunden.kunde_nachname LIKE '%$stichwort%' OR 
        $db_kunden.kunde_notiz LIKE '%$stichwort%' OR 
        $db_kunden.kunde_adresse LIKE '%$stichwort%' OR 
        $db_kunden.kunde_plz LIKE '%$stichwort%' OR 
        $db_kunden.kunde_ort LIKE '%$stichwort%' OR 
        $db_kunden.kunde_id LIKE '%$stichwort%' OR 
        $db_kunden.kunde_email LIKE '%$stichwort%' OR 
        $db_kunden.kunde_homepage LIKE '%$stichwort%' OR 
        $db_kunden.kunde_telefon LIKE '%$stichwort%' OR 
        $db_kunden.kunde_fax LIKE '%$stichwort%' OR
        $db_kontakt.kontakt_nachname LIKE '%$stichwort%' OR
        $db_kontakt.kontakt_vorname LIKE '%$stichwort%' 
        )"


natürlich soll nur ein treffer pro kunde gelistet werden. hab das problem mit INNER JOIN, dass er mir nur den ersten tabelleneintrag durchsucht also kunde_id=1
bei LEFT JOIN liefert er mir zwar die richtigen treffer, aber es kann sein dass der kunde mehrfach aufgelistet wird.
wo liegt hier der fehler?

auslesen tu ich mit:
PHP-Code:

    $ergebnis mysql_query("$suchstring LIMIT $page_min, $page_max");
    while(
$row mysql_fetch_object($ergebnis))
    {    
...



T.dot 22.11.2004 13:53

hm, wenn ich dich grad richtig verstanden hab könntest es mal mit "SELECT DISTINCT ......" probieren, sollte alle gleichen Werte zu einem zusammenfassen. sonst müssts noch mit "WHERE (...) GROUP BY $db_kunden.kunde_id" funktionieren.

mfg Thomas

mqs 22.11.2004 14:26

habs mit group by getestet und es geht einwandfrei.. aber mit left join.
was mich n wenig stutzig macht ist das es mit inner join nicht funktioniert

T.dot 22.11.2004 14:33

Kommt zuviel oder zuwenig raus?

wenn zuwenig: dann gibts beim inner join für manche kunden keine kontakte

wenn zuviel: könnt sein, dass du das ganze dann noch nach der kontakt_id ($db_kontakt.kontakt_id, falls es sowas in deiner db gibt) gruppieren musst (group by $db_kunde.kunde_id,$db_kontakt.kontakt_id)

ich leg dir außerdem noch die ausführliche manual von mysql ans herzen:
http://dev.mysql.com/doc/mysql/de/index.html
http://dev.mysql.com/doc/mysql/en/index.html

mqs 22.11.2004 14:38

naja es war so dass er mir bei left join alle einträge gebracht hat aber bei inner join nur einträge von ersten kunden wenn ein eintrag mit dem stichwort übereingestimmt hat

T.dot 22.11.2004 15:14

Hm, gute Frage.

Kenne leider deine Datenbankstruktur nicht, daher - wo ist die Kunden_ID eindeutig? Ich denke mal in der Kundentabelle.
Gibt es für einen Kunden mehrere Kontakte oder umgekehrt?
Gibt es für jeden Kunden Kontakte? Wenn dem nicht so ist, werden bei inner join nur die Kunden zurückgeliefert, für die ein Kontakt vorhanden ist. Das kann natürlich zufällig nur eine Zeile sein, falls nur für einen Kunden ein Kontakt vorhanden ist.

group by fasst immer unterschiedliche werte für die Kunden_id zusammen. also wenn mehrere verschiedene kunden_ids vorhanden sind, müssten auch mehrere zeilen vorhanden sein.

Aber - nachdem du eine funktionierende Lösung hast kannst du diese ja verwenden :D

mfg Thomas

mqs 22.11.2004 15:18

ja solange es keine probleme gibt
trotzdem danke für dein bemühen!

T.dot 22.11.2004 15:30

solangs so einfach ist, gerne :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag