我在mysql中有5个表,形成4个一对多的关系。这些表是last_name,parent,child,grandchild和city。姓氏有很多父母,父母有很多孩子,孩子有很多孙子,城里有很多孙子。
我需要以随机顺序获取孙子(在某个城市),但是按照last_name(即不同的行但连续)分组,但是随机顺序使用last_name。所以基本上。
Last_name GrandChild
B 3
B 56
B 9
D 2
D 67
C 38
C 20
A 14
到目前为止我有这个
SELECT ln.id, gc.id
FROM parent p
INNER JOIN child ch
ON ch.parent_id = p.id
INNER JOIN grandchild gc
ON ch.id = gc.child_id
WHERE gc.city_id = 3
这只是给了我需要的布局和关系,但我不知道从那里去哪里。这可能吗?如果是这样,我需要研究哪些命令/技术?
答案 0 :(得分:3)
我假设“分组”你的意思是你希望每个孙子在一个单独的行上,但在连续的行上都有相同的姓氏。
SELECT ln.id, gc.id
FROM parent p INNER JOIN
child ch
ON ch.parent_id = p.id INNER JOIN
grandchild gc
ON ch.id = gc.child_id inner join
(select ln.*, rand() as rand
from lastname ln
) ln
on p.lastname = ln.lastname
WHERE gc.city_id = 3
order by ln.rand
换句话说,这会为姓氏指定一个随机数,然后将其用于订单。顺便说一句,你的要求是模棱两可的。如果您希望按父级而不是姓氏进行排序,则可以在父级上执行子查询。
答案 1 :(得分:0)
SELECT gc.lastname, group_concat(p.lastname) as grandchildren
FROM parent p
INNER JOIN child ch ON ch.parent_id = p.id
INNER JOIN grandchild gc ON ch.id = gc.child_id
WHERE gc.city_id = 3
group by gc.lastname