Как упорядочить по связанной таблице, в которой много записей для одного элемента?

#php #mysql #sql

#php #mysql #sql

Вопрос:

У меня есть 2 таблицы — родительская и дочерняя. Я хочу вернуть всех родителей, отсортированных по именам их детей. Но поскольку у родителей может быть несколько дочерних элементов, я не могу понять, как это отсортировать. Мне нужно было бы взять дочерний элемент, который имеет имя в алфавитном порядке (каждого родителя), и использовать его для какой-либо сортировки.

В принципе, мне нужно было бы сделать это

  1. Отсортируйте всех дочерних элементов всех родителей и получите первого дочернего элемента (в алфавитном порядке) каждого.

Например, для родителя с идентификатором: 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. Приятно знать, я смог вам помочь.