简体   繁体   English

SQL中有多个但单独的WHERE条件?

[英]multiple but separate WHERE conditions in SQL?

I'm trying to get user messages from the database where the user is either the sender or the recipient with one other unique user, and I can't figure out how to write the WHERE statement. 我正在尝试从数据库中获取用户消息,在该数据库中,用户既是发件人,又是与另一位唯一用户的收件人,但我不知道如何编写WHERE语句。 This is what I have now: 这就是我现在所拥有的:

$sql = " SELECT sender, 
       receiver, 
       timestamp, 
       message 
FROM   messages 
WHERE  ( receiver = '$log_username' 
         AND sender = '$messageOther' ) 
        OR ( receiver = '$messageOther' 
             AND sender = '$log_username' ) 
ORDER  BY timestamp DESC";
$query = mysqli_query($db_conx, $sql);
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
    $message = $row["message"];
    $sender = $row["sender"];
    $receiver = $row["receiver"];
    $timestamp = $row["timestamp"];
    $messagehtml .= 'Sender: '.$sender.' | Receiver: '.$receiver.' | Message: '.$message.' | Timestamp '.$timestamp.'<br />';
    }

What's the best way of writing this to get that result? 编写此代码以获得结果的最佳方法是什么?

If you mean that $log_username should be either sender or receiver and the other value $messageOther should be either sender or receiver following query will work for you: 如果你的意思是$log_username应该是senderreceiver和其他价值$messageOther应该是senderreceiver下面的查询会为你工作:

SELECT sender, receiver, timestamp, message 
FROM messages 
WHERE ((receiver='$log_username' AND sender='$messageOther') OR
(receiver='$messageOther' AND sender='$log_username'))
ORDER BY timestamp DESC

sqlfiddle sqlfiddle

Well instead of AND you need to use OR everywhere. 好吧 AND您需要在任何地方使用 OR而不是 AND Try following, it works on my test table: 尝试以下操作,它可以在我的测试表上运行:

 
 
 
  
  SELECT sender, receiver, timestamp, message FROM messages WHERE ((receiver='$log_username' AND receiver='$messageOther') OR (sender='$messageOther' AND sender='$log_username')) ORDER BY timestamp DESC
 
  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM