2009-07-23 98 views
1

什么是获取事物子目录的最佳方式?获取列表的最有效方法?

我有两个表:

create table A (
    id int primary key 
) 

create table B (
    id int primary key, 
    aid int foreign key references A(id), 
    sort_key int 
) 

我想获得对象的名单,与子对象B,但只有B.

前五名

比方说,一个是人,和B是食物的类型,sort_key是一个人喜欢那种食物的程度。我如何获得每个人(或某些人)和他们的五大食物?

回答

2

在以前的评论,如果它是一个INT你不能把非NUMERICS在那里。

假设下面的数据:

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

这个查询假设排序关键字是基于一个,而不是0:

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 
+0

感谢,但sort_key可以是任何东西,和没有编号,虽然我可以预处理数据做这样的事情。 – Timmy 2009-07-23 21:14:03

+0

对于基于建模的非数字数据,您会遇到问题 - 当前该列是一个整数;) – 2009-07-23 21:16:36

相关问题