SQL中的IF语句中的条件

问题描述:

我需要从包含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条件。

如何做到这一点?

不能使用那样的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