【问题标题】:Ordering by using Group_Concat proving tricky使用 Group_Concat 进行排序很棘手
【发布时间】:2011-08-16 07:00:54
【问题描述】:

我对 php/mysql 有点陌生,所以我确定我遗漏了一些东西。这种方法可能也不是最好的。

我有以下表格

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

表:人 字段:id、name、rank_id

表格:排名 字段:id、name、rank

表格:单位 字段:id、name、rank

我正在尝试显示每个单元和每个单元中的人员,并按排名对人员进行排序,这是一个 int 字段。看起来很简单,但我无法让这些人按 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 by 不会影响 Group_Concat,所以我的猜测是我需要在 Group_Concat 进入数组之前以某种方式对其进行排序。该数组似乎是按人员 ID 排序的。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 使用 {} 按钮格式化代码。

标签: php mysql arrays group-concat


【解决方案1】:

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

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

就目前而言,您的查询将按 unit.codename 分组,并且在每个 unit.codename 内,任意结果将首先按units.rank 排序,然后按ranks.rank。

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

【讨论】:

  • 感谢您的回复。今晚晚些时候我会试一试。当我提到数组时,我没有提到我对 GROUP_CONCAT 所做的事情,我稍后会添加以下内容: $name = $row['name']; $members_array = explode(",", $name);所以我可以轻松地将 GROUP_CONCAT 的内容放入列表中。不确定这是否是最好的方法。
  • 其实我之前有机会尝试过,但是没有成功。我做错了什么? 'code' $roster_query = 'SELECT unit_members.person_id, GROUP_CONCAT(persons.id ORDER by ranks.rank desc) as personid, GROUP_CONCAT(persons.name ORDER by ranks.rank desc) as name, ...'code' etc
  • 编辑您的问题以包含一些示例数据以及您期望的输出。您需要为四个表中的每一个提供一些示例数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 2010-11-02
  • 2015-05-11
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多