从PHPDatabase中选择数据:类似消息的算法
用户1和2有一个表单从PHPDatabase中选择数据:类似消息的算法,php,mysql,Php,Mysql,用户1和2有一个表单 <form action = "" method = "post"> <input type = "text" name = "msg" placeholder = "message..."> <input type = "submit" name = "submit" value = "send"> </form> 将此消息发送到数据库的PHP代码也非常简单: $sql = "INSERT INTO message
<form action = "" method = "post">
<input type = "text" name = "msg" placeholder = "message...">
<input type = "submit" name = "submit" value = "send">
</form>
将此消息发送到数据库的PHP代码也非常简单:
$sql = "INSERT INTO messages (from, to, message) VALUES ('$userid','$to','$msg')";
$q = mysqli_query($con,$sql);
现在,如果user1发送“Hello User 2!”,它将使用user1的id从表注册到数据库中的,然后将user2的id注册到表中的,对吗?如果user2发送,user2的id将位于from
中,user1的id位于to
中
现在给出这个示例表:(假设其他用户也开始发送消息)
如何仅选择和查看用户1和用户2的对话?
我尝试了“从消息中选择*,其中FROM,to='user1'和FROM,to='user2'代码>但不知何故不起作用。尝试下面的查询假设每个记录的AccID都是唯一的
,我使用了AccID的顺序
,这样就可以按插入顺序获取消息。
另一个选项(为了获得更好的性能):
注意:from
和to
是SQL保留关键字。因此,请避免将它们用作表中的列名称。
相反,尝试使用一些有意义的名称,这些名称不会与任何保留关键字冲突,同时也可以提高可读性,例如,从用户发送,发送给用户。如果您不知道,您使用的是2个mysql保留字,所以我怀疑你在其网站上发布的插入内容own@Fred-ii-你的意思是什么?请参考参考手册,尝试“从消息中选择*,其中,from
in('user1','user2')和to
in('user1','user2');“from
和to
是mysql保留字,解释器可能会混淆它们,因此1)尽量避免mysql保留字作为表/列名2)最好用“`”(而不是“`”)括起这些列名,即使它在没有附件的情况下也可以工作。我是否可以在if语句中使用它?类似于if(user1 IN('user1','user2')){
user1是值,而不是列名。不能这样使用。当与多个值进行比较时,
中的是最佳选择。
$sql = "INSERT INTO messages (from, to, message) VALUES ('$userid','$to','$msg')";
$q = mysqli_query($con,$sql);
AccID | FROM | TO | MESSAGE
1 user1 user2 hello user2!
2 user2 user1 hi watsup?
3 user3 user1 hi user1
4 user4 user3 hey user3
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;