MySQL - ORDER BY, CASE und IF geschachtelt - Syntax-Fehler
bubble
- datenbank
0 Der Martin0 hotti0 ChrisB0 gelöst
bubble0 MudGuard
Ich habe bei einem SELECT-Query im ORDER BY-Teil ...
ORDER BY
CASE `oms_order`.`state`
WHEN 'UNTOUCHED' THEN
IF NOW > `oms_order`.`deadline` THEN -- line 24
0
ELSEIF DATE_ADD(NOW, INTERVAL 7 DAY) > `oms_order`.`deadline` THEN
2
ELSE
4
END
WHEN 'PROCESSING' THEN
IF NOW > `oms_order`.`deadline` THEN
1
ELSEIF DATE_ADD(NOW, INTERVAL 7 DAY) > `oms_order`.`deadline` THEN
3
ELSE
4
END
ELSE
5
END ASC,
`oms_order`.`deadline` ASC;
... bei dem über einen Syntaxfehler gemeckert wird ...
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOW >
oms_order.
deadline THEN 0 ELSEIF DATE_ADD(NOW, INTERVAL 7 DAY' at line 24' in ...
... verstehe aber nicht wirklich, was ich falsch mache.
Wo liegt mein Fehler?
MfG
bubble
Hi,
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOW >
oms_order.
deadlineTHEN 0 ELSEIF DATE_ADD(NOW, INTERVAL 7 DAY' at line 24' in ...
Wo liegt mein Fehler?
soweit ich weiß, ist NOW formal als Funktion realisiert: NOW()
Ciao,
Martin
hi,
... verstehe aber nicht wirklich, was ich falsch mache.
Wo liegt mein Fehler?
Vermutlich in Deiner Verkettung, die mysql nicht versteht, benutzt concat();
Horst
Hi,
WHEN 'UNTOUCHED' THEN IF NOW > `oms_order`.`deadline` THEN -- line 24
> SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOW > `oms\_order`.`deadline` THEN 0 ELSEIF DATE\_ADD(NOW, INTERVAL 7 DAY' at line 24' in ...
> ... verstehe aber nicht wirklich, was ich falsch mache.
Abgesehen von dem, was Martin schon sagte, ist IF im Handbuch nicht umsonst unter [Control Flow *Functions*](http://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if) gelistet.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Ich antworte hier mal allen.
Danke :D
@ChrisB: Ich hatte mich an http://dev.mysql.com/doc/refman/5.1-olh/de/if-statement.html gehalten, da das übersichtlicher wär im Query.
@Der Martin: Das war mehr oder weniger ein Typo + Copy & Paste, des ersten IFs dann.
@hotti: Hä? Ich benutz da dorch gar keine String-Verkettung.
Der vollständigkeitshalber hier noch mal der funktionierende ORDER BY
-Part:
ORDER BY
CASE `oms_order`.`state`
WHEN 'UNTOUCHED' THEN
IF(
NOW() > `oms_order`.`deadline`,
0,
IF(
DATE_ADD(NOW(), INTERVAL 7 DAY) > `oms_order`.`deadline`,
2,
4
)
)
WHEN 'PROCESSING' THEN
IF(
NOW() > `oms_order`.`deadline`,
1,
IF(
DATE_ADD(NOW(), INTERVAL 7 DAY) > `oms_order`.`deadline`,
3,
4
)
)
ELSE
5
END ASC,
`oms_order`.`deadline` ASC;
MfG
bubble
Hi,
@ChrisB: Ich hatte mich an http://dev.mysql.com/doc/refman/5.1-olh/de/if-statement.html gehalten, da das übersichtlicher wär im Query.
Das if-Statement ist für procedures. Die IF-Function für innerhalb eines (Select- oder anderen) Statements.
cu,
Andreas