verschachteltes Select-Statement in 4.0
Martin Hein
- datenbank
0 Don Corleone0 Martin Hein0 fifo
0 Rouven
Hallo Forum,
ich habe ein verschachteltes Select-Statement geschrieben. Das
funktioniert auf meiner Entwicklungsumgebung. Jetzt zeigt sich,
dass es leider auf dem Liveserver nicht funktioniert, weil da
eine alte MySQL 4.0 läuft. Mein Fehler, auf einer neueren Version
zu entwickeln. Ich weiss.
Meine Frage:
Kann ich diese Verschachtelung mit MySQL alternativ ausdrücken,
so dass sie auf der alten Version funktioniert, oder muss ich
das mit PHP lösen ?
beste gruesse,
martin hein
ich habe ein verschachteltes Select-Statement geschrieben.
Kannst Du den SQL-Code mal hier posten, auf den ersten Blick sieht der Code mega-beknackt aus. (dreifacher Selbst-JOIn und wraum überhaupt? Alles frisch in der Tüte? :)
???
Der SQL-CODE steht doch in der Fehlermeldung.
Ich versuche mal zu beschreiben, was ich realisieren will.
Hier mein Ergebnissatz richtig sortiert:
site_id link_title d1 d2 d3
3 Unsere Leistungen 1 0 0
7 Zähne 1 4 0
99 Zahnvorsorge 1 4 3
Bekannt ist site_id = 99 und ich suche nach dem Datensatz,
1. bei dem d1 und d2 gleich und d3=0 ist.
2. bei dem d1 gleich, d2=0 und d3=0 ist.
beste gruesse,
martin
Der SQL-CODE steht doch in der Fehlermeldung.
Soll der abgetippt werden, wie uncool.
site_id link_title d1 d2 d3
3 Unsere Leistungen 1 0 0
7 Zähne 1 4 0
99 Zahnvorsorge 1 4 3Bekannt ist site_id = 99 und ich suche nach dem Datensatz,
- bei dem d1 und d2 gleich und d3=0 ist.
- bei dem d1 gleich, d2=0 und d3=0 ist.
SELECT
* -- da darf auch etwas anderes stehen ;)
FROM
Table
WHERE
(site_id = 99) AND
(
(
(d1 = d2) AND
(d3 = 0)
) OR
(
(d1 = '') AND -- siehe Frage unten
(d2 = 0) AND
(d3 = 0)
)
)
Was heisst "bei dem d1 gleich,"?
sorry, so weit, dass der abgetippt werden will,
hab ich nicht gedacht.
sorry, ich denk immer, die aufgabenstellung sei
jedem anderen so klar, wie mir.
das kann sie natürlich nicht sein ;)
ich versuch's nochmal anders zu beschreiben:
in jedem datensatz stehen immer die felder
d1, d2, d3, site_title und site_id.
ich habe eine site_id. mit der hole ich mir einen
datensatz (WHERE site-id=99). nun will ich alle
datensätze, bei denen d1 gleich dem ergebnisdatensatz
ist, d2 und d3 aber 0 und bei denen d1 und d2 gleich
dem ergebnisdatensatz, d3 aber 0 ist.
site_id link_title d1 d2 d3
------- ----------------- -- -- --
3 Unsere Leistungen 1 0 0
7 Zähne 1 4 0
99 Zahnvorsorge 1 4 3
Mit drei Select-Statements sähe das in etwa so aus:
SELECT d1
, d2
, d3
...
WHERE
site\_id
= ".$site_id."
=> $d1, $d2, $d3
SELECT site\_id
...
WHERE d1
= ".$d1."
AND d2
= ".$d2."
AND d3
= ".$d3."
=> $site_id1 (ist überflüssig, weil diese site_id ist ja bekannt)
SELECT site\_id
...
WHERE d1
= ".$d1."
AND d2
= ".$d2."
AND d3
= 0
=> $site_id2
SELECT site\_id
...
WHERE d1
= ".$d1."
AND d2
= 0
AND d3
= 0
=> $site_id3
... und so ist es auch zur zeit gelöst.
beste gruesse,
martin
Hello,
ohne es mir im Einzelnen angeschaut zu haben, sollte die Verschachtelung durch einen Mehrfachjoin (genauer: mehrfachen Selfjoin) aufzulösen sein.
MfG
Rouven