2013-02-16 3 views
0

매우 잘 작동하는 쿼리가 있습니다. 그것으로 시작합시다 :SQL의 쿼리에 하위 쿼리 추가

편집 : SQL이 업데이트되었습니다. 모든 행에 0이 있습니다.

SELECT i.item, i.user_id, u.username, 
     (COALESCE(r.ratetotal, 0)) AS total, 
     (COALESCE(c.commtotal, 0)) AS comments, 
     (COALESCE(r.rateav, '50%')) AS rate, 
     (COALESCE(x.wasRated, '0')) AS wasRated 
     FROM items AS i 
     LEFT JOIN master_cat AS c 
      ON (c.cat_id = i.cat_id) 
     LEFT JOIN users AS u 
     ON u.user_id = i.user_id  
     LEFT JOIN 
      (SELECT item_id, 
      COUNT(item_id) AS ratetotal, 
      AVG(rating) AS rateav 
      FROM ratings GROUP BY item_id) AS r 
     ON r.item_id = i.item_id 
     LEFT JOIN 
      (SELECT item_id, 
      COUNT(item_id) AS commtotal 
      FROM reviews GROUP BY item_id) AS c 
     ON c.item_id = i.item_id 
     LEFT JOIN 
      (SELECT xu.user_id, ra.item_id, '1' AS wasRated 
      FROM users AS xu 
      LEFT JOIN ratings AS ra 
       ON ra.user_id = xu.user_id 
      WHERE xu.user_id = '1') AS x 
     ON x.user_id = u.user_id 
       AND x.item_id = r.item_id 
     WHERE c.category = 'Movies' 
     ORDER by i.item ASC; 

나는 당신이 중요 여기에 세 개의 테이블이있다, 기본적으로

AS x를 볼 경우, 여기에 하나 개 더 기능을 추가해야합니다. items, reviewsratings. 맨 위 부분에는 각 항목의 평균 및 합계와 같은 통계를 사용하는 하위 쿼리가 있습니다.

user_id, item_idrate_id (ratings)에 연결된 최종 쿼리가 필요합니다. 최종 결과에서 각 항목 및 통계가 표시되는 곳에서 사용자가 등급을 매기면 하나 이상의 열이 표시되고 간단한 경우 true 또는 false가 필요합니다. 그래서 나는 이런 식으로 뭔가가 필요합니다

SELECT ??? 
FROM ratings AS r 
WHERE r.user_id = '{$user_id}' 

(로그인 한 사용자의 user_id PHP.`에서 전달됩니다)

내가 나에게 정보의 마지막 비트를 제공하는 하위 쿼리를 만들지 만, 그것을두고 어떻게

상위 쿼리 항목의 각 행에?

+0

테이블에 대한 SQL DDL과 일부 SQL INSERT 문을 게시하면 더 많은 응답을 얻을 수 있습니다. –

답변

1

상위 쿼리에 추가하십시오.

, coalesce(x.WasRated, 'false') as WasRated 

사용자의 X 서브 쿼리는 다음과 같습니다 좋아

(select users.user_id 
, ratings.item_id 
, 'true' WasRated 
from users join ratings on user.user_id = ratings.user_id 
where users.user_id = the one for the logged in user 
) x on x.user_id = users.user_id 
and x.item_id = ratings.item_id 

또는 뭔가.

+0

제출 한 내용을 기반으로 내 코드를 업데이트했으며 결과도 포함 시켰습니다. 이견있는 사람? – KickingLettuce

+1

내 제안은 하위 쿼리의 등급에서 사용자의 내부 조인을 수행하는 것이 었습니다. 왼쪽 조인이 있습니다. 내 의도는 사용자가 항목을 평가 한 경우 하위 쿼리가 'true'를 반환한다는 것입니다. 기본 쿼리의 병합 함수는 그렇지 않은 경우이를 false로 변경합니다. 하위 조인에 왼쪽 조인을두면 모든 사용자에게 true를 반환합니다. –

+0

방금 ​​내부 조인으로 바꿨고 몇 가지 아주 미세 조정을하고 작동 시켰습니다! 옳은 표시, 감사합니다! – KickingLettuce