从PHPDatabase中选择数据:类似消息的算法

时间:2017-06-26 01:46:48

标签: php mysql

用户1和2有一个表单。

<form action = "" method = "post">
  <input type = "text" name = "msg" placeholder = "message...">
  <input type = "submit" name = "submit" value = "send">
</form>

我的数据库中有这个表:

AccID  |  FROM  | TO  |  MESSAGE 

将此消息发送到数据库的PHP代码也非常简单:

$sql = "INSERT INTO messages (from, to, message) VALUES ('$userid','$to','$msg')";
$q = mysqli_query($con,$sql);

现在,如果user1发送“Hello User 2!”,它将使用user1的id注册到数据库from表,然后user2的id到to权限?如果user2发送,则user2的ID将位于from上的to和用户1上。

现在给出这个样本表:(假设其他用户也开始发送消息)

AccID  |  FROM  |  TO  | MESSAGE 
1         user1   user2    hello user2!
2         user2   user1    hi watsup?
3         user3   user1    hi user1
4         user4   user3    hey user3

如何选择和查看user1和用户2的对话? 我试过"SELECT * FROM messages WHERE from,to = 'user1' AND from,to = 'user2'";,但不知何故没用。

1 个答案:

答案 0 :(得分:1)

尝试以下查询。 Assuming that AccID is unique对于每条记录,我使用了ORDER BY AccID,以便可以按插入顺序获取消息。

SELECT * FROM messages
WHERE (`from` = 'user1' AND `to` = 'user2') OR (`from` = 'user2' AND `to` = 'user1')
ORDER BY AccID;

另一种选择(为了更好的表现):

SELECT * FROM messages
WHERE `from` IN ('user1','user2') AND `to` IN ('user1','user2')
ORDER BY AccID;

注意: fromto是SQL保留关键字。所以请避免将它们用作表格中列的名称。
而是尝试使用一些不与任何保留关键字冲突的有意义的名称,并提高可读性,例如sent_from_user,sent_to_user。