bubble: MySQL - ORDER BY, CASE und IF geschachtelt - Syntax-Fehler

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

--
If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
  1. 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.deadline THEN 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

    --
    Liebet eure Feinde - vielleicht schadet das ihrem Ruf.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. hi,

    ... verstehe aber nicht wirklich, was ich falsch mache.

    Wo liegt mein Fehler?

    Vermutlich in Deiner Verkettung, die mysql nicht versteht, benutzt concat();

    Horst

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

    --
    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
    1. 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

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.