MySQL在表行上循环,运行另一个查询,连接结果

MySQL在表行上循环,运行另一个查询,连接结果,mysql,list,loops,subquery,self-join,Mysql,List,Loops,Subquery,Self Join,我有一个类似于my_表的表,并且名称列值是唯一的: ID NAME RANK AGE 1 John 4 21 2 Sam 1 43 3 Tom 3 57 4 Bob 2 39 5 Dave 5 25 我想运行一个查询,其中我为每一行选择所有属性,再加上另一列,该列是按年龄描述排序的其他名称列表,而不是其本身的限制,比如说3,结果如下: NAME RANK AGE S

我有一个类似于my_表的表,并且名称列值是唯一的:

ID   NAME   RANK   AGE
1    John   4      21
2    Sam    1      43
3    Tom    3      57
4    Bob    2      39
5    Dave   5      25
我想运行一个查询,其中我为每一行选择所有属性,再加上另一列,该列是按年龄描述排序的其他名称列表,而不是其本身的限制,比如说3,结果如下:

NAME   RANK   AGE   SOME_LIST
John   4      21    Tom,Sam,Bob
Sam    1      43    Tom,Bob,Dave
Tom    3      57    Sam,Bob,Dave
Bob    2      39    Tom,Sam,Dave
Dave   5      25    Tom,Sam,Bob
SELECT name FROM my_table WHERE name <> 'John' ORDER BY age DESC LIMIT 3;
因此,为John获取一些_列表的查询如下:

NAME   RANK   AGE   SOME_LIST
John   4      21    Tom,Sam,Bob
Sam    1      43    Tom,Bob,Dave
Tom    3      57    Sam,Bob,Dave
Bob    2      39    Tom,Sam,Dave
Dave   5      25    Tom,Sam,Bob
SELECT name FROM my_table WHERE name <> 'John' ORDER BY age DESC LIMIT 3;
我不知道1如何将这些结果转换成逗号分隔的单列,2如何对我的_表中的每一行运行此查询

更新:

正在接近此查询:

SELECT *, (SELECT GROUP_CONCAT(name) FROM my_table t1 WHERE t1.name <> t2.name ORDER BY age DESC LIMIT 3) AS some_list FROM my_table t2;

但是some_list列不遵守age desc order by,也不遵守限制。仅接受。您可以使用以下解决方案:

SELECT m1.*, SUBSTRING_INDEX(GROUP_CONCAT(m2.name ORDER BY m2.age DESC), ',', 3) AS 'SOME_LIST'
FROM my_table m1 LEFT JOIN my_table m2 ON m1.name <> m2.name
GROUP BY m1.ID

使用子字符串_索引可以限制逗号分隔值的数量。您也可以直接在组目录上按值排序。

Perfect!谢谢