通过使用Group_Concat进行排序证明是棘手的

时间:2011-05-01 01:41:55

标签: php mysql arrays group-concat

我对php / mysql有点新意,所以我肯定我错过了什么。这种方法可能也不是最好的。

我有以下表格

表:unit_members 字段:id,unit_id,person_id,primary

表:人 字段:id,name,rank_id

表:排名 字段:id,name,rank

表:单位 字段:id,name,rank

我正在尝试显示每个单元和每个单元中的人员,并按人员排序的人员进行排序。看起来很简单,但我无法通过rank.rank来命令这些人。

这是我的疑问:

'SELECT unit_members.person_id, GROUP_CONCAT(persons.id) as personid, 
        GROUP_CONCAT(persons.name) as name, persons.rank_id, unit_members.unit_id, 
        units.id as unitid, units.name as unit, 
        GROUP_CONCAT(DISTINCT units.codename) as squad, ranks.id as rankid, 
        GROUP_CONCAT(ranks.rank) as rankrank 
FROM unit_members, ranks, persons, units
where persons.rank_id = ranks.id 
  and units.id = unit_members.unit_id 
  and persons.id = unit_members.person_id
group by units.codename
ORDER BY units.rank asc, ranks.rank asc';

在我看来,这里的Order不会影响Group_Concat,所以我的猜测是我需要在它进入数组之前以某种方式对Group_Concat进行排序。该数组似乎是按人名订购的。

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为你只是有一些误解。

您的ORDER BY不会影响GROUP_CONCAT()的结果。您可以通过在parens中指定订单来change the order of results in a GROUP_CONCAT() function

按照目前的情况,您的查询将按unit.codename分组,并且在每个unit.codename中,任意结果将首先按units.rank排序,然后按ranking.rank排序。

一个更大的问题:你一直在谈论阵列。这里没有数组。