#php #mysql #sql
#php #mysql #sql
Вопрос:
У меня есть 2 таблицы — родительская и дочерняя. Я хочу вернуть всех родителей, отсортированных по именам их детей. Но поскольку у родителей может быть несколько дочерних элементов, я не могу понять, как это отсортировать. Мне нужно было бы взять дочерний элемент, который имеет имя в алфавитном порядке (каждого родителя), и использовать его для какой-либо сортировки.
В принципе, мне нужно было бы сделать это
- Отсортируйте всех дочерних элементов всех родителей и получите первого дочернего элемента (в алфавитном порядке) каждого.
Например, для родителя с идентификатором: 9 его дочерним элементом будет Алекс Бриггс (выберите * из дочерних элементов, где parent_id = 9 порядок по asc LIMIT 1)
1. Alex Briggs (first one)
------------------------------
2. Ashley Briggs
3. Lucy Briggs
4. Lukas Briggs
And for parent with id: 3
1. Alex Skull (first one)
------------------------------
2. Don Skull
3. Erica Skull
А затем верните всех родителей, отсортированных по их первому дочернему элементу (в алфавитном порядке).
select * from parents order by ( their first child by alphabet .... ASC )
родительская таблица
| id | fullname |
1 Mark Dever
2 John Witney
3 Joey Skull
4 Abraham Lincon
5 Donald Trump
6 Britney Huston
7 Martin Lu
8 Eric Tada
9 Andy Briggs
10 Linda Briggs
дочерняя таблица
| id | parent_id | fullname |
1 9 Lukas Briggs
2 9 Alex Briggs
3 10 Ashley Briggs
4 10 Lucy Briggs
5 1 Mark Driscoll
6 2 Zack Witney
7 2 Victoria Witney
8 3 Alex Skull
9 3 Don Skull
10 3 Erica Skull
результат будет таким
{
parent_id: 9,
fullname: Andy Briggs,
children: [
...Alex, Ashley, Lucy...
]
},
{
parent_id: 10,
fullname: Linda Briggs,
children: [
...Alex, Ashley, Lucy...
]
},
{
parent_id: 3,
fullname: Joey Skull,
children: [
...Alex, Don, Erica...
]
},
{
parent_id: 1,
fullname: Mark Dever,
children: [
...Mark...
]
},
{
parent_id: 2,
fullname: John Witney,
children: [
...Victoria, Zack...
]
},
Ответ №1:
Поскольку вы хотите упорядочить имя дочерних элементов, вы можете использовать приведенный ниже запрос.
SELECT b.parent_id,a.fullname, GROUP_CONCAT(b.fullname ORDER BY b.fullname ASC) children
FROM parent a
JOIN children b
ON a.id=b.parent_id
GROUP BY b.parent_id,a.fullname;
Комментарии:
1. Это идеально, единственное, что мне нужно было добавить, это УПОРЯДОЧИТЬ по дочерним элементам в конце этого запроса.
2. Приятно знать, я смог вам помочь.