我有一个简单的问题。我有以下mysql查询:
SELECT DISTINCT name FROM nametable WHERE status = 0 ORDER BY id ASC
这将为我提供一个包含所有不同名称的表格,从最低的id编号开始。我想逐个处理这些名称,并且需要检索与名称关联的id,但是,查询只返回不同的名称,如何获取与名称关联的id。当我在查询中添加id时,如下所示:
SELECT DISTINCT id, name FROM nametable WHERE status = 0 ORDER BY id ASC
当然,它会给我所有不同的id,它会给我重复的名字,这是我不想要的。
更新
所以我刚刚进行了查询,结果如下所示。是,有办法获得每个ID的第一个数字吗?我还注意到groupconcat的ID不是ASC顺序,我需要从最低开始获取第一个ID。
----------------------------
| name | Group_Concat(ID) |
----------------------------
| name1 | 1,2,3,4 | //1
-----------------------------
| name2 | 22,20 | //20
-----------------------------
| name3 | 12 | //12
-----------------------------
| name4 | 45, 41 | //41
----------------------------
| name5 | 55, 51, 52 | //51
----------------------------
已解决以下问题:
SELECT id, name FROM nametable WHERE status = 0 GROUP BY name ORDER BY id ASC
答案 0 :(得分:2)
你可能需要像
这样的东西SELECT name,
GROUP_CONCAT(id)
FROM table
GROUP BY name;
源是MySQL documentation:
在MySQL中,您可以获取表达式的连接值 组合。要消除重复值,请使用DISTINCT子句。 要对结果中的值进行排序,请使用ORDER BY子句。排序 反向顺序,将DESC(降序)关键字添加到名称中 您在ORDER BY子句中排序的列。默认是 升序;这可以使用ASC明确指定 关键词。组中值之间的默认分隔符是逗号(,)。 要明确指定分隔符,请使用SEPARATOR,然后使用 应在组值之间插入的字符串文字值。至 完全取消分隔符,指定SEPARATOR''。
我看到你更新了这个问题,所以根据我的理解,你总是需要最低的身份。
然后你需要使用MIN()功能。 这看起来像是这样的:
SELECT name,
MIN(id)
FROM table
GROUP BY name;
答案 1 :(得分:1)
这应该是你要找的东西:
SELECT MIN(id), name
, GROUP_CONCAT(DISTINCT id ORDER BY id) AS idList -- If you need them
FROM nametable
WHERE status = 0
GROUP BY name
ORDER BY MIN(id);