2011-01-23 211 views
1

我對查詢中IF ELSE語句的工作方式感到困惑。針對ORDER BY的查詢中的IFELSE語句

這是我一直很努力,再加上它的變化,但我似乎無法得到它帶回結果沒有錯誤...

$get_trash = mysql_query("SELECT * 
          FROM message 
          WHERE message_to_user_id = '$user_id' 
          AND message_to_user_id_hide = 1 
           OR message_from_user_id = '$user_id' 
          AND message_from_user_id_hide = 1 
          IF message_to_user_id = '$user_id' 
          THEN ORDER BY message_to_user_id_hide_time DESC 
          ELSEIF 
           message_from_user_id = '$user_id' 
          THEN ORDER BY message_from_user_id_hide_time DESC 
          ENDIF") or die(mysql_error()); 

現在我如果else語句使用用PHP無數次,但我從來沒有在MySQL查詢中使用它,所以如果任何人可以闡明你如何去做,那麼我會非常感激!

+0

我不認爲之類的東西有序的投影可以這樣做。您最好是在PHP中構建查詢或使用一組查詢在存儲過程中執行此項工作 – Perpetualcoder 2011-01-23 20:41:15

+0

您在WHERE子句中有問題 - 它不會返回正確的結果,因爲對(from,to)不會是優化器顯而易見。你需要圍繞他們的括號。其次,from和to兩個字段都在結果集中 - 你不能同時按兩列排序。這個查詢最好是UNION語句。 – 2011-01-23 20:41:24

回答

2

這是否做你所需要的?

ORDER BY CASE '$user_id' WHEN message_to_user_id 
         THEN message_to_user_id_hide_time 
         WHEN message_from_user_id 
         THEN message_from_user_id_hide_time END DESC 
4

如果你能說出你的表的樣子,這將有所幫助。但是,根據您已經嘗試了SQL,我想你要尋找的是沿着這些路線的東西:

SELECT * FROM message WHERE 
    (message_to_user_id = '$user_id' AND message_to_user_id_hide = 1) OR 
    (message_from_user_id = '$user_id' AND message_from_user_id_hide = 1) 
ORDER BY 
    (CASE 
     WHEN message_to_user_id = '$user_id' 
     THEN message_to_user_id_hide_time 
     ELSE message_from_user_id_hide_time 
    END) DESC