1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
552
552
EMPFEHLEN
-
17.02.11 11:08 #1
- Registriert seit
- Mar 2005
- Beiträge
- 213
Hallo zusammen,
Ist es mit MySQL möglich, WHERE-Bedingungen anzugeben die nur in Kraft treten wenn die Subquery einen Wert zurück gibt?
Beispiel:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
SELECT `tbl_address`.* FROM `tbl_address` WHERE `FK_state`=(SELECT `FK_state` FROM `tbl_address_filter` WHERE `FK_address`='123') AND `FK_category`=(SELECT `FK_category` FROM `tbl_address_filter` WHERE `FK_address`='123') AND `FK_country`=(SELECT `FK_country` FROM `tbl_address_filter` WHERE `FK_address`='123') AND `FK_type`= (SELECT `FK_type` FROM `tbl_address_filter` WHERE `FK_address`='123')
Die ersten drei Bedinungen sind zwingend da FK_state, FK_category, FK_country Pflichtfelder sind.
FK_type ist ein Zusatzfeld. Nun soll die Bedinung nur in Kraft treten wenn die Subquery:
Code :1 2 3
(SELECT `FK_type` FROM `tbl_address_filter` WHERE `FK_address`='123')
einen Wert der nicht NULL ist zurückliefert.
Kann ich so etwas mit MySQL abfragen oder muss ich einen anderen Ansatz wählen?
-
item: Ich rate dir dei 2 Tabellen mittels JOIN zu verbinden. Soviele Subqueries und alle auf denselben Datensatz sind subotpimal
item: dann kannst du mit IFNULL ein wenig 'bescheisseisen' und im NULL-Fall den Wert von tbl_adress mit sich selber vergleichen
Code sql:1 2 3 4 5 6 7 8 9 10 11
SELECT adr.* FROM tbl_address AS adr INNER JOIN tbl_address_filter AS fil ON adr.FK_state = fil.FK_state AND adr.FK_category = fil.FK_category AND adr.FK_country = fil.FK_country AND adr.FK_type = IFNULL(fil.FK_type, adr.FK_type) WHERE fil.FK_address = '123'
Geändert von Yaslaw (17.02.11 um 11:21 Uhr) Grund: t
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
17.02.11 12:00 #3
- Registriert seit
- Mar 2005
- Beiträge
- 213
Soweit funktioniert das Statement ganz gut, wenn nun die beiden Werte adr.FK_type und fil.FK_type gleich NULL sind werden diese Datensätze nicht angezeigt, dann ich dies irgendwie umgehen? Es scheint wie wenn NULL = NULL nicht funktionieren würde.
Code :1
AND adr.FK_type = IFNULL(fil.FK_type, adr.FK_type)
Nachtrag:
Habe soeben einen Lösungsansatz gefunden. Gemäss MySQL gibt es ein "NULL-sicheres Gleich" welches auch bei NULL-Werten funktioniert: <=>Geändert von unrealzero_php (17.02.11 um 12:04 Uhr)
-
Jepp. Ein Vergleich mit NULL ist immer NULL
MySQL kennt darum auch den Vergleich <=>. Dieser vergleicht im Gegensatz zu = auch NULL
Code sql:1
AND adr.FK_type <=> IFNULL(fil.FK_type, adr.FK_type)
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
17.02.11 12:16 #5
- Registriert seit
- Mar 2005
- Beiträge
- 213
Wenn die Werte nun in einem Wertebereich liegen kann dann auch auf NULL-Werte geprüft werden?
Beispiel:
Code :1
AND `adr`.`zip`>=IFNULL(`fil`.`zip`, `adr`.`zip`)
Mit grösser gleich >= oder <= gleich
-
Nope. Da hilft aber IFNULL(feld, 'NULL'). Also das man anstelle von NULL den String 'NULL' vergleicht
Natürlich kann ans anstelle von 'NULL' auch etwas anderes nehmen. Wenn das Feld zum Beispiel immer NULL oder positive Zahlen hat, dann nimmt man -1 oder -99999 etc. Musst halt einfach ein Ersatzwert finden, der mit deinen Daten ein richtiges Resultat ergibt
Code sql:1
AND IFNULL(adr.zip, 'NULL')>=IFNULL(`fil`.`zip`, IFNULL(adr.zip, 'NULL'))
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
Wert per php aus tabelle abfragen wenn wert erreicht soll spalte 2 um eines erhöht
Von bastiekleve im Forum PHPAntworten: 64Letzter Beitrag: 17.12.10, 20:23 -
[Ajax] POST-Variable enthält undefined, Script-Teil enthält richtigen Wert
Von WorldRacer im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 08.09.10, 19:54 -
Regex: finden, wenn erstes Klammernpaar leer und zweites eine Zahl enthält - wie?
Von Kryptaesthesie im Forum Sonstige SprachenAntworten: 7Letzter Beitrag: 22.10.08, 15:40 -
[Matlab] Überprüfen ob eine Variable einen Wert enthält
Von venom im Forum Sonstige SprachenAntworten: 6Letzter Beitrag: 18.03.08, 11:22 -
[Batch] Wenn Datei ein " enthält, dann mach das
Von Azi im Forum Sonstige SprachenAntworten: 4Letzter Beitrag: 07.10.05, 21:13





Zitieren

Login





