Ort eines Kunden von einer anderen Tabelle holen

Danny77

Aktiver Benutzer
Beiträge
26
Hallo,
ich habe eine Suche wo nach dem Namen aller Verkäufe gesucht werden kann. Nun möchte ich auch zusätzlich nach dem Ort suchen lassen können, allerdings liegt dieser in einer anderen Tabelle. Habe mich schon an JOIN versucht, scheint aber nicht so recht zu klappen.

Kurze Übersicht der beiden Tabellen (kleiner Ausschnitt):
  • Tabelle `verkauf`:
|vertreterid|kunde|straße| (in `kunde` liegt der Name)
  • Tabelle `Kunde`:
|Name|Straße|Ortschaft|vertreterid|

SQL:
  • So sieht es ohne Ort aus (funktioniert):
SELECT DISTINCT `kunde`
FROM `verkauf`
WHERE `vertreterid` = '$idver' AND kunde LIKE '%$search%'
ORDER BY `kunde` DESC;
($idver liegt in der session || '%$search%' übergebe ich über POST)

  • Nun das sql an dem ich mich mit join versucht habe:
SELECT DISTINCT `kunde`, Kunde.Ortschaft
FROM `verkauf`
INNER JOIN Kunde ON verkauf.straße = Kunde.Straße AND verkauf.kunde = Kunde.Name
WHERE `verkauf.vertreterid` = '$idver' AND verkauf.kunde LIKE '%$search%' OR Kunde.Ortschaft LIKE '%$search%'
ORDER BY `verkauf.kunde` DESC;
 
Werbung:
Ich schenke Dir ein Paar Klammern () und den Rat, die Tabellen besser zu organisieren. Du hast Name und Straße des Kunden in 2 Tabellen. Mach lieber eine Kundennummer, diese als Primary key, und referenziere bzw. joine über diese.
 
Das ist jetzt leider zu spät.
Habe schon über 1000 Einträge und massenhaft viel php code der mit dieser Tabellen-Konstruktion läuft. Dann bräuchte ich auch bei jeder Abfrage Join...

Mit klammern sollte das Problem gelöst sein ?

SELECT DISTINCT `kunde`, Kunde.Ortschaft
FROM `verkauf`
INNER JOIN Kunde ON (verkauf.straße = Kunde.Straße AND verkauf.kunde = Kunde.Name)
WHERE `verkauf.vertreterid` = '$idver' AND (verkauf.kunde LIKE '%$search%' OR Kunde.Ortschaft LIKE '%$search%')
ORDER BY `verkauf.kunde` DESC;

So?
 
Ich denke dass die Performance mehr zu leiden hat wenn ich bei jeder Abfrage Join verwenden muss. Habe manchmal um die 20-30 Abfragen pro Seite.

Edit: Oder was genau meinst du mit Performance ? Mehr als die Verkäufe mit den Kunden zu trennen kann ich auch nicht tun.

Edit: Funktioniert immer noch nicht.
 
Solange es nicht mehrere Sekunden dauert =), wegen die paar ms. Dann meinst du liegt der Fehler woanders als im SQL ?

Edit: Wenn ich es so machen würde wie du sagtest müsste ich auch jedes mal in der Kundentabelle nach dem Namen suchen damit ich die Kundennummer im Verkauf abspeichern kann.
 
Hab ich gemacht #3. Vielleicht die Klammer bei ON nicht gut ? =)

Edit: Hab die entfernt hat auch nichts geholfen ... Na dann wird wohl im PHP Code nun ein Fehler sein.
 
Im Suchfeld wo ich die Namen über Ajax json bekomme kommt einfach nichts.
Bekomme den Fehler "Call to a member function fetch_assoc() on boolean". Schien mir zunächst ein SQL Fehler zu sein, aber scheinbar doch nicht.
 
Werbung:
Zurück
Oben