Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Ort eines Kunden von einer anderen Tabelle holen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Danny77, 7 Dezember 2016.

  1. Danny77

    Danny77 Aktiver Benutzer

    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;
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. Danny77

    Danny77 Aktiver Benutzer

    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?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ich denke ja. Zumindest Dein aktuelles Problem. Du wirst aber weitere Probleme bekommen, wenn Du mehr als nur die paar Datensätze hast. Zum Beispiel mit der Performance. Aber 'lernen durch Schmerz' ist eine durchaus bewährte Methode, also mach weiter ;-)
     
  5. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    ERROR.

    Du hast einen Join. Über 2 Spalten. Text-Spalten offenbar. Ein JOIN über eine Spalte, dazu noch eine numerische (INT) ist um einiges schneller. Und Deine Where - Filter machen die Sache auch nicht besser.
     
  7. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Lies meine Antwort ;-)
     
  9. Danny77

    Danny77 Aktiver Benutzer

    Wenn diese mir auf irgend einer Weise helfen würde ;-).
     
  10. akretschmer

    akretschmer Datenbank-Guru

    AND hat eine höhere Wertigkeit als OR, daher hast Du derzeit impliziet where (x and y) or z, Du willst aber where x and (y OR z).
     
  11. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  12. akretschmer

    akretschmer Datenbank-Guru

    Ah, stimmt. Nun ja, was passiert denn?
     
  13. Danny77

    Danny77 Aktiver Benutzer

    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.
     
  14. akretschmer

    akretschmer Datenbank-Guru

    Der Schein trügt nicht.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden