Mysql 如何排除列值重复的行,并在删除重复项之前按ID列表对结果进行排序?

Mysql 如何排除列值重复的行,并在删除重复项之前按ID列表对结果进行排序?,mysql,sql,Mysql,Sql,我有一张类似的桌子: ---------------------------------- | id | user_id | likes | ---------------------------------- | 1 | 1 | dogs | | 2 | 1 | cats | | 3 | 2 | fish | | 4 | 2 | s

我有一张类似的桌子:

----------------------------------
| id    |   user_id   |  likes   |
----------------------------------
|  1    |      1      |  dogs    | 
|  2    |      1      |  cats    | 
|  3    |      2      |  fish    | 
|  4    |      2      |  snakes  | 
|  5    |      1      |  pandas  | 
|  6    |      1      |  fish    | 
----------------------------------
我有一个用于检索行的
id
s列表,但我只希望每个用户返回一行(ids对应于多个用户的行)。列表将仅为表中的部分
ID
,而不是全部ID。例如:

2,1,3,6 
如果列表中有多个
id
s属于同一用户,我想检索列表中第一个出现的
id
的行

在上面的示例中,对于
user\u id
1,应返回
id
=2的行,对于
user\u id
2,应返回
id
=3的行

我可以使用
分组依据
,而不使用聚合:

SELECT id, user_id, likes
FROM my_table
WHERE id IN (2,1,3,6)
GROUP BY user_id
但从我所读到的来看,这样做在语义上是不正确的。这也不会返回列表中第一个出现的
id
的行,而是返回具有最低
id
的行(因此,当我想要获得
id
=2的行时,
id
=1的行被返回给
user\u id
=1)。我尝试向查询中添加
orderbyfield
,但似乎这是在分组之后发生的


有更好的方法吗?

您可以尝试在WHERE using TOP中执行子查询,如下所示:

SELECT id, user_id, likes
FROM my_table
WHERE id IN (SELECT TOP 1 id FROM tableids WHERE mytable.userid = userid)
GROUP BY user_id
或者,如果您在其他查询中没有用户ID,只需使用
TOP
就可以了。

以下是我的建议:

SELECT Table1.* FROM Table1 
JOIN (
SELECT t.user_id, SUBSTRING_INDEX(GROUP_CONCAT(t.id ORDER BY FIELD(t.id, 2,1,3,6)),',', 1) AS firstRowPerUser 
FROM Table1 t
WHERE t.id IN (2,1,3,6)
GROUP BY t.user_id) tRes ON Table1.id=tRes.firstRowPerUser;
使用带有
分组依据
分组内容
子字符串索引
的子查询,从每个用户的自定义列表中获取用户列表和第一条记录的id。
然后将结果与初始表连接起来。

不是很清楚。。。。那么,对于用户1,您有ID 2,1,3,那么用户2呢?您将有一组不同的ID,并且您希望在最后同时接收用户1和用户2,每个用户都有来自给定列表的第一条记录?您能否给出一个有2个用户和预期输出的示例,please@cyadvertID列表用于属于多个用户的行。在多于一个ID属于单个用户的情况下,我想返回具有列表中第一个ID的行,排除其他行。如果您愿意,请考虑以下简单的两步过程:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供与步骤1中提供的信息相对应的所需结果集。明白了。具有挑战性的我会试着做点什么。如果找到解决方案,将发布。可能需要多个子查询。每个用户:(问题似乎是关于MySQL的