获得列表最有效的方法?

时间:2009-07-23 21:05:10

标签: sql mysql

获取事物子列表的最佳方法是什么?

我有两张桌子:

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名食物?

2 个答案:

答案 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