2011-01-15 2 views
1

두 개의 mysql 테이블이 있습니다. 문자열이있는 테이블 하나 (예 : abc, def, ghi, jkl). 다른 테이블에는 다른 테이블에있는 문자열에 대한 정보가 들어 있습니다. 예를 들어 '알파벳의 첫 번째 세 글자', '알파벳의 3-6 글자'등이 있습니다. 이 테이블에는 각 문자열에 대해 여러 행 (약 25 행)이있을 수 있습니다.MySQL - 테이블 문자열별로 정렬 및 제한

나는 예를 들어, 첫 번째의 각 문자열을 두 번째 테이블에서 3 개 행을 반환 할 :

table1.string | table2.info 
--------------------------- 
abc   | blahblah 
abc   | blahblah2 
def   | blahblah 
abc   | blahblah3 
def   | blahblah2 
def   | blahblah3 

나는 foreach 문을 더욱 쿼리를 실행, 표 처음부터 문자열을 얻을 수 있습니다 테이블 2에서 제한 3을 얻으려고. 하지만 성능면에서는 좋지 않은 것 같습니다.

이 검색어는 어떻게 표시됩니까?

+0

테이블 생성 SQL을 게시 할 수 있습니까? – James

답변

0

(그것이 비록 매우 빠르게 아니다) 나는 그것이 MySQL의 작동 여부를 알 수는 없지만, MSSQL이는

 
SELECT 
    table1.string, 
    table2.info 
FROM table1 INNER JOIN table2 ON table2.stringID = table1.ID 
WHERE ROW_NUMBER() OVER (PARTITION BY table1.string ORDER BY table2.info) <= 3

0

당신이 시도 할 수있을 것이다 :

SELECT string,info FROM 
(
    select t1.string, t2.info, 
    @n_rec := IF(@tmp!=t1.string,1,@n_rec+1) as nrec, 
    @tmp := t1.string 
    FROM 
    table_1 t1 
    INNER JOIN table_2 t2 ON t2.table_1_id = t1.id 
    order by t1.string 
)yy 
INNER JOIN (SELECT @n_rec := 0) X 
INNER JOIN (SELECT @tmp:= null)Y 
WHERE nrec <=3; 

당신은 사용 할 수 있습니다 table_2의 정보없이 table_1의 레코드를 포함해야하는 경우 INNER JOIN table_2 대신 LEFT JOIN table_2을 입력하십시오.