IF和ELSE IF语句不在MYSQL查询中工作

时间:2017-06-30 03:51:48

标签: mysql

我在下面有一个查询,我正在使用IF语句,但它无效。

 "SELECT * FROM chat,user WHERE 
IF(chat.seller_id='".$user_id."') THEN user.id=chat.buyer_id  
ELSE IF(chat.buyer_id='".$user_id."') THEN user.id=chat.seller_id"

4 个答案:

答案 0 :(得分:1)

请尝试使用CASE:

SELECT * FROM chat,user WHERE 
CASE 
    WHEN chat.seller_id='".$user_id."' THEN user.id=chat.buyer_id
    WHEN chat.buyer_id='".$user_id."' THEN user.id=chat.seller_id
    ELSE user.id='something'
END

如果您有任何非卖家或买家的用户ID

,则其他

答案 1 :(得分:0)

你应该试试这个:

SELECT * FROM chat,user WHERE user.id = CASE 
 WHEN chat.seller_id='".$user_id."' THEN chat.buyer_id
 WHEN chat.buyer_id='".$user_id."' THEN chat.seller_id
 ELSE user.id='something'
 END

答案 2 :(得分:0)

这个功能与以下相同:

"SELECT * 
FROM chat c,user u
WHERE (c.seller_id = u.id AND c.buyer_id = ".$user_id.")
 OR (c.buyer_id = u.id AND c.seller_id = ".$user_id.")"

答案 3 :(得分:0)

您的查询逻辑也可以使用UNION

来完成
"
SELECT  *
FROM    chat
JOIN    user
ON      user.id         = chat.buyer_id
WHERE   chat.seller_id  = '".$user_id."'

UNION

SELECT  *
FROM    chat
JOIN    user
ON      user.id         = chat.seller_id
WHERE   chat.buyer_id   = '".$user_id."'
";

您应该测试UNION vs CASE,看看哪个更快。请注意,即使您的CASE查询有效,在旧版本的phpMyAdmin中仍可能会出现错误,因为解析器存在CASE语句问题。

如果您只想要特定$user_id已购买或出售的其他用户的列表,您可能需要考虑仅查询user.*或甚至只查询特定的user列。两个表上的SELECT *让我觉得你想要提取$user_id的聊天记录,但是你也应该知道你在这里的逻辑可以抓住已经购买或出售的用户的聊天记录。 $user_id$user_id不一定是chat_id buyer_id seller_id 1 4 6 2 2 6 3 4 9 4 6 4 5 1 4 6 6 5 7 9 2 8 2 4 。这是一个示例表:

seller = 4

如果buyer_id = [1,2,6] => chat_id [2,4,5,6,8],则buyer = 4

如果seller_id = [6,9] => chat_id [1,2,3],则[1,2,3,4,5,6,8]

即使用户4只是[1,3,4,5,8]

的一部分,您的结果也会包含$user_id

如果您只想要SELECT * FROM chat c JOIN user u ON ( c.seller_id = u.id OR c.buyer_id = u.id ) WHERE u.id = $user_id 的聊天,那么您可以使用类似

的内容
#product_name

此外,由于您是串联查询的字符串,请阅读并学习使用PDO和参数化查询来保护自己免受SQL注入攻击。