获取事物子列表的最佳方法是什么?
我有两张桌子:
create table A (
id int primary key
)
create table B (
id int primary key,
aid int foreign key references A( id ),
sort_key int
)
我想获得一个对象列表A,包含子对象B,但只有B的前五位。
让我们说A是人,B是食物的类型,sort_key是一个人喜欢这种食物的程度。我如何得到每个人(或某些人)和他们的前5名食物?
答案 0 :(得分:2)
在上一条评论中,如果是INT,则不能将非数字放在那里。
假设以下数据:
a
--
id
1
2
3
b
------------------------
id aid sort_key
1 1 1
2 1 2
3 2 1
4 3 1
5 1 3
6 1 4
7 1 5
8 1 6
9 2 2
10 2 3
MySQL中的以下查询将为您提供:
SELECT a.*,
(SELECT GROUP_CONCAT(id) AS ids FROM b AS bi WHERE bi.aid = a.id ORDER BY sort_key LIMIT 5) AS ids
FROM a
结果:
id ids
1 1,2,5,6,7,8
2 3,9,10
3 4
答案 1 :(得分:1)
此查询假定排序键是基于一个而不是零:
SELECT a.name
b.food
FROM A a
JOIN B b ON b.aid = a.id
WHERE b.sortkey <= 5
ORDER BY a.name, b.sortkey