Mysql 根据另一个表从一个表中选择唯一的行,然后对其进行排序
我有两张桌子:Mysql 根据另一个表从一个表中选择唯一的行,然后对其进行排序,mysql,sql,Mysql,Sql,我有两张桌子: communications: -------------------------------------------------- id | subject | timestamp | starter -------------------------------------------------- messagepartners ------------------------------------------------- id | c
communications:
--------------------------------------------------
id | subject | timestamp | starter
--------------------------------------------------
messagepartners
-------------------------------------------------
id | commid | userid | type
-------------------------------------------------
messagepartners表存储参与对话的用户的ID(存储在communications表中)。
messagepartners中的列commid存储相应的通信id(通信中的列id)
对于id为userid的特定用户,我希望获得userid参与的通信列表。列表应不包含重复项,并按时间戳排序
我应该如何为此编写sql查询?
谢谢分步进行
下面是一种连接表的方法
SELECT *
FROM communications as c
JOIN messagepartners as p on c.id = p.commid
按用户ID筛选
SELECT *
FROM communications as c
JOIN messagepartners as p on c.id = p.commid
WHERE p.userid = X
我们需要的数据
SELECT c.id, c.subject, c.timestamp
FROM communications as c
JOIN messagepartners as p on c.id = p.commid
WHERE p.userid = X
没有重复
SELECT DISTINCT c.id, c.subject, c.timestamp
FROM communications as c
JOIN messagepartners as p on c.id = p.commid
WHERE p.userid = X
我建议您运行这些步骤中的每一步,并了解为什么您在每一步都会得到结果。以下查询可以满足您的要求:
SELECT
b.*
FROM
(
SELECT
commid
FROM
messagepartners
WHERE
userid = 1234
GROUP BY
commid
) a
INNER JOIN communications b ON (a.commid = b.id)
ORDER BY
B.timestamp
;
不要忘记用用户id替换1234。您必须使用连接。你试过什么吗?这是简单的sql。