SELECT wie Aufrufen wenn WHERE-Bedingung aus Array stammt
René
- datenbank
Hallo Forum,
ich habe ein kleines programmiertechnisches Problem. Ich habe eine MySQL DB die hat unter anderem die Tabellen rechnungen und kunden. kunden hat als Primärschlüßel eine Kundennummer. Dies kommt als Fremdschlüßel in der Tabelle rechnungen vor. Ich mache nun eine Select-Abfrage auf die Tabelle rechnungen, um alle Kunden herauszufinden, denen länger als 3 Monate keine Rechnung zugesandt wurde. Nun brauche ich aber auch noch zusätzliche Daten über die Kunden. Eigentlich kein Problem, da ich ja vorher die Kundennummern aus der tabelle Rechnungen ermittelt habe und nun eine SELECT Abfrage auf die Tabelle kunden machen kann. Das Problem aber dabei: Es gibt womöglich mehrere Kunden auf die das zutrifft. Daher habe ich zunächst die Kundennummern in ein Array (ich nutze als Programmiersprache um die DB anzusprechen PHP 4) gespeichert. Ich kann aber keine SELECT Abfrage mit einer Where Klausel machen die ein Array enthält. Also müßte ich wohl eigentlich die Select-Abfrage in einer Schleife aufrufen. Das ist sehr unschön. Da ich ohnehin die Ergebnisse der SQL-Abfrage in ein zweidimensonales Array umwandeln muß (Zeile, Spalte) würde dann sogar ein dreidimensonales Array rauskommen. Gibt es da keine elegantere Möglichkeit?
schönen Gruß
René
Hallo René
»Das Problem aber dabei: Es gibt womöglich mehrere Kunden auf die das zutrifft. Daher habe ich zunächst die Kundennummern in ein Array (ich nutze als Programmiersprache um die DB anzusprechen PHP 4) gespeichert. Ich kann aber keine SELECT Abfrage mit einer Where Klausel machen die ein Array enthält. Also müßte ich wohl eigentlich die Select-Abfrage in einer Schleife aufrufen. Das ist sehr unschön. Da ich ohnehin die Ergebnisse der SQL-Abfrage in ein zweidimensonales Array umwandeln muß (Zeile, Spalte) würde dann sogar ein dreidimensonales Array rauskommen. Gibt es da keine elegantere Möglichkeit?
<erbsenzähler>
Du greifst mittels SQL auf Deine Datenbank zu. Die SQL-Anweisungen generierst Du mit der Programmiersprache PHP
</erbsenzähler>
Du solltest nachsehen, welche Funktionen in einer WHERE-Klausel zulässig sind, http://www.mysql.com/doc/en/Comparison_Operators.html
Genauer gesagt solltest Du Dich mit
IN expr
befassen.
Den Inhalt Deines Kundennummern-Arrays in den Ausdruck umzuwandeln, den Du für IN benötigst, das solltest Du schon hinkriegen.
Falls nicht, melde Dich einfach noch einmal.
Gruss,
Vinzenz
Hi,
womit man dir auch helfen könnte wären JOINS:
Ziel der ganzen Sache ist es zwei (oder mehr) Tabellen so über bestimmte Spalten zu verbinden, dass am Ende eine Ergebnismatrix mit allen gesuchten Daten aus den verschiedenen Tabellen entsteht.
Suchst du also:
Rechnungen:
datum
Kunden:
name, vorname
und beiden Tabellen ist die kundennummer gemein, dann mach folgende Abfrage:
SELECT rechnungen.datum, kunden.name, kunden.vorname
FROM rechnungen INNER JOIN kunden ON kunden.kundennummer = rechnungen.kundennummer
WHERE xx
Bei den JOINS gibts halt noch so Feinheiten wie:
INNER:
--> Es kommen nur Datensätze in das Ergebnis, wo beide Daten vorhanden sind (d.h. hier: nur Kunden mit entsprechender Rechnung und Rechnungen mit vorhandenem Kunden)
LEFT:
--> Es kommen alle Datensätze der ersten Tabelle in das Ergebnis, wenn vorhanden werden die Daten der zweiten Tabelle zugefügt, sonst NULL (hier: Alle Rechnungen aus dem Zeitraum, entweder mit oder ohne Kundeninformationen)
RIGHT:
--> Invers zu LEFT (hier: Alle Kunden, eventuell mit den Rechnungen sonst ohne - würde aber nicht funktionieren, da durch das anschließende WHERE-Kriterium auf das Rechnungsdatum diese Datensätze wohl eher wieder veschwinden würden)