Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 - Fatal编程技术网

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。