Упорядочение с помощью Group_Concat оказалось сложным

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

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

Таблица: unit_members Поля: id, unit_id, person_id, первичный

Таблица: лица Поля: id, name, rank_id

Таблица: ранги Поля: id, имя, ранг

Таблица: юниты Поля: id, name, rank

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

Вот мой запрос:

'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, прежде чем он попадет в массив. Массив, кажется, упорядочивает его по идентификатору человека.

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


person user732907    schedule 01.05.2011    source источник
comment
Используйте кнопку {} для форматирования кода.   -  person Mike Sherrill 'Cat Recall'    schedule 01.05.2011


Ответы (1)


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

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

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

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

person Mike Sherrill 'Cat Recall'    schedule 01.05.2011
comment
Спасибо за ваш ответ. Я попробую позже сегодня вечером. Когда я упоминаю массив, я не упомянул, что я делал с GROUP_CONCAT. Я добавлю следующее: $name = $row['name']; $members_array = взорвать(,, $имя); поэтому я могу легко поместить содержимое этого GROUP_CONCAT в список. Не уверен, что это лучший способ сделать это. - person user732907; 03.05.2011
comment
На самом деле у меня была возможность попробовать это раньше, но это не сработало. Что я сделал не так? 'код' $roster_query = 'ВЫБРАТЬ unit_members.person_id, GROUP_CONCAT(persons.id ORDER по рангу.rank desc) как персона, GROUP_CONCAT(persons.name ORDER по рангу.rank desc) как имя, ... 'code' и т. д. - person user732907; 03.05.2011
comment
Отредактируйте свой вопрос, включив в него некоторые примеры данных и ожидаемый результат. Вам потребуется предоставить небольшой образец данных для каждой из четырех таблиц. - person Mike Sherrill 'Cat Recall'; 03.05.2011