WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 22.11.2004, 12:31   #1
mqs
Master
 
Registriert seit: 08.05.2001
Alter: 44
Beiträge: 533


mqs eine Nachricht über ICQ schicken
Standard [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))
    {    
...

____________________________________
http://www.schmausen.at
Dein Infoportal für Mittagsmenüs in Klagenfurt
mqs ist offline   Mit Zitat antworten
Alt 22.11.2004, 12:53   #2
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

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
T.dot ist offline   Mit Zitat antworten
Alt 22.11.2004, 13:26   #3
mqs
Master
 
Registriert seit: 08.05.2001
Alter: 44
Beiträge: 533


mqs eine Nachricht über ICQ schicken
Standard

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
____________________________________
http://www.schmausen.at
Dein Infoportal für Mittagsmenüs in Klagenfurt
mqs ist offline   Mit Zitat antworten
Alt 22.11.2004, 13:33   #4
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

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
T.dot ist offline   Mit Zitat antworten
Alt 22.11.2004, 13:38   #5
mqs
Master
 
Registriert seit: 08.05.2001
Alter: 44
Beiträge: 533


mqs eine Nachricht über ICQ schicken
Standard

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
____________________________________
http://www.schmausen.at
Dein Infoportal für Mittagsmenüs in Klagenfurt
mqs ist offline   Mit Zitat antworten
Alt 22.11.2004, 14:14   #6
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

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

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 22.11.2004, 14:18   #7
mqs
Master
 
Registriert seit: 08.05.2001
Alter: 44
Beiträge: 533


mqs eine Nachricht über ICQ schicken
Standard

ja solange es keine probleme gibt
trotzdem danke für dein bemühen!
____________________________________
http://www.schmausen.at
Dein Infoportal für Mittagsmenüs in Klagenfurt
mqs ist offline   Mit Zitat antworten
Alt 22.11.2004, 14:30   #8
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

solangs so einfach ist, gerne
T.dot ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:27 Uhr.


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