Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取对话列表查询_Mysql_Sql_Database - Fatal编程技术网

Mysql 获取对话列表查询

Mysql 获取对话列表查询,mysql,sql,database,Mysql,Sql,Database,假设我们的表具有以下结构,其中包含示例数据和其他用户,而不仅仅是2 因此,在这种情况下,每两个用户之间只会收到一次对话,如 35比1和 1至35 但我尝试了下面的查询,得到了两个对话 select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at, (select user_name from users where user_id = msg_from ) user_name from messages

假设我们的表具有以下结构,其中包含示例数据和其他用户,而不仅仅是2

因此,在这种情况下,每两个用户之间只会收到一次对话,如

35比1和 1至35

但我尝试了下面的查询,得到了两个对话

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at,
    (select user_name from users where user_id = msg_from ) user_name 
    from messages where msg_id in 
    (select max(msg_id) from messages ) 
    and msg_to = 35 or msg_from = 35

请帮助获得正确的结果。

您忘记了
语句周围的括号:

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at,
    (select user_name from users where user_id = msg_from ) user_name 
from messages where msg_id in 
    (select max(msg_id) from messages ) 
    and (msg_to = 35 or msg_from = 35)

您忘记了
语句周围的括号:

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at,
    (select user_name from users where user_id = msg_from ) user_name 
from messages where msg_id in 
    (select max(msg_id) from messages ) 
    and (msg_to = 35 or msg_from = 35)

我认为您应该将条件
msg_to=35或msg_from=35
放在括号之间,并将其移动到返回max id的子查询中。如下代码所示:

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at,
(select user_name from users where user_id = msg_from ) user_name 
from messages where msg_id in 
(select max(msg_id) from messages  
where (msg_to = 35 or msg_from = 35))

我认为您应该将条件
msg_to=35或msg_from=35
放在括号之间,并将其移动到返回max id的子查询中。如下代码所示:

select msg_id,msg_from,msg_to,msg_content,msg_status,msg_created_at,
(select user_name from users where user_id = msg_from ) user_name 
from messages where msg_id in 
(select max(msg_id) from messages  
where (msg_to = 35 or msg_from = 35))

如果您只需要一次对话,请将from和to约束为:
和((msg_to=35和msg_from=1)或(msg_to=1和msg_from=35))
可能您遇到了除用户1之外的另一方与用户35对话。您可能还缺少围绕
术语设置的括号
()
。我没有2个用户,但有很多用户:(问题是a)由于
周围没有
()
,原始查询将返回任何带有
msg\u from=35的内容。b) 您需要约束对话的两端(1和35),而不仅仅是其中一个(35)。@ebyrob谢谢您的权利,我忘记了括号。如果您只需要一个对话,请约束from和to:
和((msg_to=35和msg_from=1)或(msg_to=1和msg_from=35))
可能除了用户1之外,还有另一方在与用户35交谈。您可能还缺少围绕
术语设置的括号
()
。我没有2个用户,但有很多用户:(问题是a)由于
周围没有
()
,原始查询将返回任何带有
msg\u from=35的内容。b) 你需要限制谈话的两端(1和35),而不仅仅是其中一个(35)。@ebyrob谢谢你,对了,我忘记了括号。