2009-07-23 93 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

相關問題