#php #mysql #arrays #group-concat
#php #mysql #массивы #group-concat
Вопрос:
Я несколько новичок в php / mysql, поэтому уверен, что чего-то не хватает. Этот подход, вероятно, тоже не самый лучший.
У меня есть следующие таблицы
Таблица: поля unit_members: id, unit_id, person_id, primary
Таблица: поля persons: id, name, rank_id
Таблица: ранжирование полей: идентификатор, имя, ранг
Таблица: поля единиц измерения: идентификатор, имя, ранг
Я пытаюсь отобразить каждое подразделение и людей в каждом подразделении и отсортировать людей по рангу, который является полем 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';
Мне кажется, что порядок здесь не влияет на Group_Concat, поэтому я предполагаю, что мне нужно каким-то образом упорядочить Group_Concat, прежде чем он перейдет в массив. Массив, похоже, упорядочивает его по идентификатору пользователя.
Любая помощь была бы высоко оценена. Заранее спасибо.
Комментарии:
1. Используйте кнопку {} для форматирования кода.
Ответ №1:
Я думаю, у вас просто некоторые неправильные представления.
Ваше ORDER BY
решение не повлияет на результаты GROUP_CONCAT()
. Вы можете изменить порядок результатов в GROUP_CONCAT()
функции, указав порядок в скобках.
В нынешнем виде ваш запрос будет группироваться по unit.codename, и внутри каждого unit.codename произвольные результаты будут отсортированы сначала по units.rank, а затем по ranges.rank .
Большая проблема: вы продолжаете говорить о массиве. Здесь нет массива.
Комментарии:
1. Спасибо за ваш ответ. Я попробую это позже вечером. Когда я упоминаю массив, я забыл упомянуть, что я делал с GROUP_CONCAT, я добавляю следующее через некоторое время: $name = $row[‘name’]; $members_array = explode(«,», $name); поэтому я могу легко поместить содержимое этого GROUP_CONCAT в список. Не уверен, что это лучший способ сделать это.
2. На самом деле у меня была возможность попробовать это раньше, но это не сработало. Что я сделал не так? ‘code’ $roster_query = ‘ВЫБЕРИТЕ unit_members.person_id, GROUP_CONCAT(persons.id УПОРЯДОЧИВАНИЕ по рангам. ранжируйте desc) как personid, GROUP_CONCAT(persons.name УПОРЯДОЧИВАНИЕ по рангам. ранжируйте desc) как имя, … ‘код’ и т. Д
3. Отредактируйте свой вопрос, чтобы включить некоторые примеры данных и ожидаемый результат. Вам нужно будет предоставить небольшие образцы данных для каждой из четырех таблиц.