IF和elseif语句在MYSQL查询中不起作用
我在下面有一个查询,我正在使用IF语句,但它不起作用IF和elseif语句在MYSQL查询中不起作用,mysql,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" 请改用CASE: SELECT * FROM chat,user WHERE CASE WHEN chat
"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"
请改用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,则应尝试以下操作:
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
这在功能上是否与:
"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.")"
查询的逻辑也可以通过
联合来完成:
"
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
vsCASE
,看看哪个更快。请注意,即使您的CASE
查询是有效的,在phpMyAdmin的旧版本中测试它时仍然可能会出现错误,因为解析器在CASE
语句中存在问题
如果您只想要一个其他用户的列表,一个特定的<代码> $USELID ID/COD>已经购买或出售,您可能需要考虑只查询<代码>用户> *>代码>或者甚至只是特定的<代码>用户列。两个表上的
选择*
让我认为您想为$user\u id
提取聊天历史记录,但您也应该知道,这里的逻辑可能会抓取从$user\u id
购买或出售给$user\u id
但不一定与$user\u 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\u id=[1,2,6]=>chat\u id[2,4,5,6,8]
如果buyer=4
,则seller\u id=[6,9]=>chat\u id[1,2,3]
您的结果将包括[1,2,3,4,5,6,8]
,即使用户4只是[1,3,4,5,8]
如果您只想为$user\u 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
另外,由于您是字符串连接查询,请仔细阅读并学习使用和参数化查询来保护自己免受SQL注入攻击。您得到的提要或错误消息是什么?没有显示任何内容。没有显示错误我认为您缺少一个连接…此外,当$user\u id
不是卖家id
或买家id
时会发生什么?如果未定义,则可能只需要一个单独的“else”。其中c.seller\u id=u.id和c.buyer\u id=u.id
意味着用户既是买家又是卖家,即他们自己出售。不过老实说,这种情况似乎更符合逻辑。