我在下面有一个查询,我正在使用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"
答案 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注入攻击。