IF和elseif语句在MYSQL查询中不起作用

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

我在下面有一个查询,我正在使用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.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
vs
CASE
,看看哪个更快。请注意,即使您的
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
意味着用户既是买家又是卖家,即他们自己出售。不过老实说,这种情况似乎更符合逻辑。