Заказ с использованием Group_Concat доказывает хитрость - PullRequest
0 голосов
/ 01 мая 2011

Я немного новичок в php / mysql, поэтому я уверен, что что-то упустил.Этот подход, вероятно, тоже не самый лучший.

У меня есть следующие таблицы

Таблица: unit_members Поля: id, unit_id, person_id, primary

Таблица: people Поля: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';

Мне кажется, что Орден здесь делаетне влияет на Group_Concat, поэтому я предполагаю, что мне нужно как-то заказать Group_Concat, прежде чем он перейдет в массив.Массив, кажется, упорядочивает его по идентификатору человека.

Любая помощь будет принята с благодарностью.Заранее спасибо.

1 Ответ

0 голосов
/ 01 мая 2011

Я думаю, у вас просто есть некоторые заблуждения.

Ваш ORDER BY не повлияет на результаты GROUP_CONCAT().Вы можете изменить порядок результатов в GROUP_CONCAT() функции , указав порядок в скобках.

В таком виде ваш запрос будет группироваться по unit.codename, а внутри каждого unit.codename произвольные результаты будут сортироваться сначала по unit.rank, а затем по ranks.rank.1010 *

Большая проблема: вы продолжаете говорить о массиве.Здесь нет массива.

...