首页 > 解决方案 > 如何按具有多个条目的相关表进行排序?

问题描述

我有 2 张桌子 - 父母和孩子。我想返回所有按孩子姓名排序的父母。但由于父母可以有多个孩子,我似乎无法弄清楚如何排序。我需要带按字母顺序排列的孩子(每个父母的名字)并以某种方式使用它进行排序。

基本上我需要做这些事情

  1. 对所有父母的所有孩子进行排序,并获得每个孩子的第一个孩子(按字母顺序)。

例如,对于id: 9的父母,他的孩子将是 Alex Briggs (select * from children where parent_id = 9 order by 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...
    ]
},

标签: phpmysqlsql

解决方案


由于您想订购孩子的名字,您可以使用以下查询。

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;

推荐阅读