2009-07-23 5 views
1

하위 목록을 얻는 가장 좋은 방법은 무엇입니까?목록을 얻는 가장 효율적인 방법은 무엇입니까?

나는 두 개의 테이블이 : 나는 하위 객체의 B와 개체의 목록을 얻고 싶은

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.

의 상위 5

의이 사람이고, B 가정 해 봅시다 sort_key는 얼마나 많은 사람이 그 음식을 좋아 하는지를 나타내는 음식의 유형입니다. 모두 (또는 일부 사람들)와 상위 5 개 음식을 어떻게 구할 수 있습니까?

답변

2

을 이전 코멘트에 당신이 거기에 비 수치를 넣을 수없는 INT 있다면.

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 

결과 :

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은 다음 쿼리는 당신이 줄 것이다 :

다음 데이터 가정

id ids 
1 1,2,5,6,7,8 
2 3,9,10 
3 4 
+0

어딘가에 오타가 있습니다 (id = 1은 6 개의 아이디가 있습니다).하지만 고마워요! 이것은 실제로 내가 필요한 것에 아주 가깝습니다! – Timmy

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

+0

모델링을 기반으로하는 숫자가 아닌 데이터를 넣는 데 문제가 있습니다. 현재 열은 int입니다.) –

+0

미안하지만 숫자가 아닌 숫자를 의미하지는 않습니다. 정확히 1,2,3,4,5가 표시됩니다. 귀하의 논리가 될 – Timmy

관련 문제