2012-07-09 3 views
0

이것은 나의 시나리오입니다. 저는 두 개의 서로 다른 테이블을 가지고 있습니다 : 테이블 '구독 정보'는 사용자 사이트 구독과 관련된 모든 정보와 구독 사이트의 제품에 대한 점수가 포함 된 '등급'테이블을 포함합니다. 단순화는 다음과 같습니다.MySQL에서 여러 쿼리의 결과를 결합한 결과 집합을 만드시겠습니까?

Subscriptions: 'id','user','place','created', etc. 
Ratings: 'id','user','product','created',etc. 

이제 가장 최근 10 개 항목 인 구독 또는 평가를 반환하려면 mysql이 필요합니다. 나는 '생성'으로 다차원 배열을 주문 두 결과 (20 개 요소)와

SELECT * FROM subscriptions WHERE ... ORDER BY created LIMIT 10. 

과 ($ 항목에 결과를 저장하여 상위 10를 얻을 : 지금까지 해결책을 찾을 수 두 개의 서로 다른 통화를 할 수 있었다) :

두 번의 호출로 얻을 수 있고 필요한 것보다 많은 정보를 반환하기 때문에이 솔루션이 효율적이지 않다고 생각합니다. UNION 연산자를 사용하면 한 번에 여러 개의 다른 테이블을 선택할 수 있지만 같은 수의 열을 사용할 수 있다고 읽었습니다. 내 질문은 하나의 호출로 공통 필드 (내 케이스에서 작성)로 정렬 된 여러 유형의 요소 중 특정 수를 조인하는 가장 효율적인 방법은 무엇입니까? 가능하지 않니? 고마워, 어떤 도움을 주셔서 감사합니다, Jesús.

답변

2

UNION이 필요합니다. 그것은 내가 게시 된 링크에서 설명 아니에요

Join two tables, then Order By date, BUT combining both tables

하지만,뿐만 아니라 UNION에 제한을 넣을 수 있습니다 :

여기에서 그것을 사용하는 방법을 배울 수 있습니다. ORDER BY와 함께하면 이것이 필요한 것입니다. (프리츠 반 Campen에의 cred)

(SELECT cols FROM subscriptions) 
UNION 
(SELECT cols FROM ratings); 
ORDER BY created LIMIT 10 
+1

게시 maxhud하지만,뿐만 아니라'UNION'에'LIMIT'를 넣을 수 있습니다. 'ORDER BY'와 결합하면 필요한 것입니다. – Halcyon

+0

UNION을 사용하는 쿼리는 여전히 하나의 호출입니다 ... – Braiba

+0

이 (가) 편집되었습니다. @FritsvanCampen은 괜찮 았으면 좋겠다. op가 내 의견 – maxhud

1

결과를 결합하는 UNION를 사용하도록 쿼리를 수정하고 결과가 결합 된 후에는 원하는 수의 출력을 제한하는 BY 제한 방법 및 ORDER를 활용할 수 기록.

이 둘러싸 괄호 안에 절 을 배치, 개별 SELECT에 의해 또는 제한하는 SELECT를 ORDER를 적용하려면 : 또한

:

가에 의해 주문을 사용하거나 LIMIT 절을 전체 UNION 결과를 정렬하거나 제한하려면 개별 SELECT 문을 괄호로 묶고 마지막 단락 뒤에 ORDER BY 또는 LIMIT을 배치하십시오.

(SELECT cols FROM subscriptions WHERE ... ORDER BY created LIMIT 10) 
UNION 
(SELECT cols FROM ratings WHERE ... ORDER BY created LIMIT 10); 
ORDER BY created LIMIT 10 
+0

하지만 쿼리에 cols 수가 같은 경우에만 UNION을 사용할 수 있다는 것을 알고 있습니다 ... 사실입니까? 내 경우에는 두 테이블 모두 다른 열이 있습니다. 편집 : 귀하의 예제에서 20 요소, 각 테이블의 10, 그것을 얻을? –

+0

맞습니다. 따라서 '*'를 사용하여 모든 열을 선택하는 대신 해당 열을 선택하여 출력을 일치시킵니다. – RobB

+2

이 코드가 잘못되었으므로'ORDER BY created LIMIT 10'을'UNION' 외부로 옮겨야합니다. 이 코드는 지난 10 개의 구독 및 지난 10 개의 평가를 제공합니다. 여기서 OP는 마지막 10 개의 '항목'(구독 또는 등급)을 원합니다. – Halcyon

관련 문제