我有一个查询,它按照以下顺序从db:
返回记录app_id app_name transaction_id mobile_no logtime_stamp navigation_type entered_code display_text User_Response
111 Unicef 1133 919552516853 10/5/2012 12:52:37 PM 0 Maharashtra Student Attendance 2
111 Unicef 1133 919552516853 10/5/2012 12:52:37 PM 0 Pune Student Attendance 2
111 Unicef 1133 919552516853 10/5/2012 12:52:37 PM 0 Baramati Student Attendance 2
111 Unicef 1133 919552516853 10/5/2012 12:52:37 PM 0 Ravi School Student Attendance 2
返回上述记录的查询是内部查询。
我正在对这些记录执行group_concat以获得单行。
我收到以下记录:
app_name transaction_id mobile_no entered_code display_text User_Response
Unicef 1133 919552516853 Baramati,Ravi School,Maharashtra,Pune Student Attendance 2
现在我不明白group_concat
函数在什么基础上排序字符串 - Baramati,Ravi School,Maharashtra,Pune !?
我希望排序与我在第一组中完全相同: 马哈拉施特拉邦,浦那,巴拉马蒂,拉维学校
据我所知,group_concat中的字符串默认按字母顺序排序。但上述结果无视这一点。
此外,我尝试了一个示例查询,其中我正在从表中读取记录并group_concating,而不指定任何特定的顺序。结果按照插入顺序对字符串进行了排序。也就是说,首先插入的记录首先出现在concat字符串中,最后一个记录出现在字符串中的最后一个记录中。
那么我可以根据内部查询的读取顺序在group_concat函数中安排/排序我的结果集吗?
答案 0 :(得分:1)
group_concat(entered_code order by entered_code)
答案 1 :(得分:1)
在您提供的结果之前没有看到完整的查询和表格数据,很难说您可以向ORDER BY
添加GROUP_CONCAT()
但是,它似乎在此工作正常演示:
select app_name,
transaction_id,
mobile_no,
group_concat(entered_code),
display_text,
User_Response
from yourtable
答案 2 :(得分:0)
只看文档:{{3}} 找到这一行:
要对结果中的值进行排序,请使用ORDER BY子句。
以及这个例子:
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
答案 3 :(得分:0)
至于文档,您必须能够根据某些字段或表达式对组concat结果进行排序。 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
你根本不应该依赖“插入顺序”,因为MySQL中没有这样的功能。在大多数情况下,您会按此顺序查看数据,但实际上并未对其进行排序,之后您的订单将变得不那么相关。