2014-09-19 84 views
0

我需要從包含where條件的SQL中獲取結果。但是,如果條件滿足某些標準,那麼某些情況下可以執行。SQL中的IF語句中的條件

我嘗試:

$query = "SELECT m.id, m.message_type, m.message_url, m.user_id, c.type 
      FROM gps_conversation_chat m left join gps_conversation c on m.conversation_id=c.id 
      WHERE m.conversation_id = $conv_id 

      IF c.type=1 THEN 
       AND m.from_message_in != 2 AND m.to_message_in != 2 
      END IF; 

      ORDER BY m.id DESC LIMIT $start, $limit "; 

上述返回錯誤,我需要的IF條件進行處理,即:

如果c.type = 1,則執行AND m.from_message_in = 2 AND m.to_message_in!= 2與WHERE條件。

如何做到這一點?

回答

4

不能使用那樣的if。但你可以這樣定義條件:

SELECT m.id, m.message_type, m.message_url, m.user_id, c.type 
FROM gps_conversation_chat m left join gps_conversation c on m.conversation_id=c.id 
WHERE m.conversation_id = $conv_id 
    AND (
     (c.type = 1 AND m.from_message_in != 2 AND m.to_message_in != 2) 
     OR c.type != 1 
    ) 
ORDER BY m.id DESC 
LIMIT $start, $limit; 

注意,通過嵌套條件你可以得到你想要的結果。



一兩件事: 您的查詢(它是書面的方式)很容易受到SQL注入攻擊。請在take a look here以獲得有關該主題的良好解釋以及防止該問題的方法。

+0

關於** SQL注入攻擊**的一個疑問是,他使用了$ conv_id直接對變量的類型嗎? – 2014-09-19 05:09:00

+1

@Suganthan直接使用的任何變量都可以成爲SQL注入攻擊的訪問點...使用預準備語句 – Barranka 2014-09-19 14:28:14