0

私はphp/mysqlに少し慣れていないので、何かが足りないと確信しています。このアプローチもおそらく最善ではありません。

次のテーブルがあります

テーブル: unit_members フィールド: id、unit_id、person_id、primary

テーブル: 人フィールド: id、name、rank_id

テーブル: ランク フィールド: ID、名前、ランク

テーブル: units フィールド: 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 by here は Group_Concat に影響を与えないように見えるので、配列に入る前に Group_Concat を何らかの方法で Order する必要があると思います。配列は個人ID順に並べられているようです。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

あなたはいくつかの誤解を持っているだけだと思います。

ORDER BYの結果に影響を与えることはありませんGROUP_CONCAT()。括弧内で順序を指定することにより、関数内の結果の順序を変更GROUP_CONCAT()できます。

現状では、クエリは unit.codename でグループ化され、各 unit.codename 内で、任意の結果が最初に units.rank で並べ替えられ、次に ranks.rank で並べ替えられます。

より大きな問題: 配列について話し続けます。ここには配列はありません。

于 2011-05-01T02:39:05.227 に答える