Php 需要正确的SQL查询吗
表: 这是messages表(类似于私有消息),from_user和to_user是自描述性的,topic_id对此并不重要 现在,我需要选择将显示在当前登录用户收件箱中的消息列表。我将使用会话变量Php 需要正确的SQL查询吗,php,mysql,sql,Php,Mysql,Sql,表: 这是messages表(类似于私有消息),from_user和to_user是自描述性的,topic_id对此并不重要 现在,我需要选择将显示在当前登录用户收件箱中的消息列表。我将使用会话变量$this\u user=$\u session['id'] 我有一个疑问: +----+----------+-----------+---------+ | id | topic_id | from_user | to_user | +----+----------+-----------+---
$this\u user=$\u session['id']
我有一个疑问:
+----+----------+-----------+---------+
| id | topic_id | from_user | to_user |
+----+----------+-----------+---------+
| 6 | 5 | 4 | 5 |
| 2 | 6 | 5 | 2 |
| 3 | 5 | 2 | 5 |
| 4 | 4 | 5 | 4 |
| 5 | 4 | 5 | 4 |
| 7 | 6 | 5 | 2 |
| 8 | 5 | 2 | 5 |
| 9 | 5 | 4 | 5 |
| 10 | 0 | 2 | 5 |
| 11 | 6 | 5 | 2 |
| 12 | 3 | 5 | 2 |
| 13 | 0 | 5 | 2 |
+----+----------+-----------+---------+
但这需要重复的信息,比如4-5,5-4,5-4
我试过使用DISTINCT,但也不起作用
任何提供的帮助都不确定如何使用DISTINCT(显示查询),但也可以这样做:
SELECT *
FROM messages
WHERE from_user = '$this_user' OR
to_user = '$this_user'
使用
UNION ALL
SELECT * FROM messages
WHERE from_user = '$this_user' OR to_user = '$this_user'
GROUP BY `id`
试试这个
SELECT 'From You' type, * FROM messages m WHERE from_user = '$this_user'
UNION ALL
SELECT 'To You', * FROM messages m WHERE to_user = '$this_user'
主题id
列上的分组吗?
使用如下查询:
select least(from_user, to_user) as x, greatest(from_user, to_user) as y
from tableName
WHERE from_user = '$this_user' OR to_user = '$this_user'
group by x, y
给我你想要的结果。请参阅此示例。如果主题与此处无关,您希望如何准确显示“不同的消息”
id
似乎是一个代理键,所以distinct topic
似乎是一个合理的赌注?你到底想要什么?登录用户与之通信的用户列表?或者主题列表以及登录用户就这些主题与之通信的人?@StuartL 1登录用户和其他用户之间的对话将是$this_user+其他用户id。因此我需要选择这种类型的对话,我将只获取消息和其他用户的计数ID@zarkoz我认为您需要使用least
和maxist
函数,GROUP BY是不相关的,因为从名称和数据来看,id
列是唯一的键。但它们不是重复的。如果用户A向B发送两次消息,则这是两条单独的消息。因此,基本上你做得不对-如果你想处理线程,你应该将所有消息分组到线程中,并从线程而不是消息中进行选择。@PatrickJamesMcDougle-是的,这不会删除重复项,如果存在重复项,也不应该删除。因为用户收到的任何消息都不应该与用户发送的任何消息重复。两个都应该显示。是的,我试过了,它显示了用户参与的所有消息(登录用户)@zarkoz-这不是你要找的吗???@MahmoudGamal这拾取->4-5,5-4,这是相同的对话。@zarkoz它们不一样,因为第一个来自用户4,而第二个来自用户4。看看我最新的答案。不客气,兄弟!顺便提一下
SELECT * FROM messages
WHERE from_user = '$this_user' OR to_user = '$this_user'
GROUP BY `topic_id`