2010-08-13 7 views
0

예약이 한 테이블 (workshop_reservation)의 레코드로 저장되고 세션 (예약되는 것)이 다른 테이블 (세션)에 저장되는 시스템이 있습니다. 각 예약은 세션에 속하며 각 세션은 워크샵에 속합니다.카운트를 사용하는 SQL 하위 쿼리를 사용하는 방법

특정 워크샵에 속한 각 세션의 예약 수를 찾는 mysql 쿼리를 만들고 싶습니다.

SELECT count(r.id) 
FROM workshop_reservation AS `r` 
WHERE r.session_id = # 

내가 수행하는 방법을 파악하려는 : (# 세션 번호입니다) 나는 주어진 세션에서 예약의 수를 찾을 수를()를 사용하려고했다,이 쿼리는 그 목적을 위해 잘 작동 모든 세션에 대한이 쿼리. 나는 쉽게 다음 쿼리를 사용하여 모든 SESSION_ID을 찾을 수 있습니다 세션 중 하나를 더 예약이 없을 때, 어떤 행이 해당 세션에 대한 인쇄하지 않기 때문에

SELECT s.id 
FROM session AS `s` 

내 문제는, 이러한 결합된다. 대신 예약이없는 세션의 수 열에 0을 인쇄하려고합니다. 다음 쿼리는 하나 이상의 예약이있는 세션에서 제대로 작동하지만 예약이없는 세션은 무시합니다 (0을 나타내는 행을 인쇄하지 않음).

SELECT count(r.id) , r.session_id 
FROM workshop_reservation AS `r` 
WHERE r.session_id 
IN (
SELECT s.id 
FROM session AS `s` 
WHERE s.workshop_id =1 
) 
AND r.reservation_status_id =0 
GROUP BY r.session_id 

이 상황에서 어떻게 0으로 행을 인쇄 할 수 있습니까?

답변

0

답장 중 하나를 선택하는 대신 여기에 넣어야한다고 생각했습니다. 어느 누구도 혼자 일한 적이 없기 때문입니다. 나는 두 요소 (주로 nico에서 한 줄의 mdma)를 사용했습니다. 여기에 내가 원하는 것을 정확하게 수행하는 쿼리입니다 :

SELECT session.id, count(workshop_reservation.id) 
FROM session LEFT JOIN workshop_reservation ON session.id = workshop_reservation.session_id 
AND workshop_reservation.reservation_status_id =0 
GROUP BY session.id 

나는이 SQL 전문가에 얼마나 분명 모른다는하지만, AND이 WHERE로 변경되면, reservation_status_id 실제로 무시됩니다.

정확히
+0

죄송 스캇, 당신은'HAVING' 대신 무엇을 사용하는 경우 ... 그 사실 내 부분에 오타라고 생각? 문제는 '어디서'는 'COUNT'와 (과) 함께 작동하지 않는다는 것입니다. – nico

+0

AND 대신 HAVING을 사용하면 구문 오류가 발생합니다. 나는 네가 무슨 뜻인지 잘 모르겠다. where를 사용하면 reservation_status_id에 관계없이 계산중인 세션에 대한 모든 예약이 생성됩니다. – scott77777

+0

죄송합니다, 내가 'HAVING'에 대해 말한 것을 잊어 버리십시오. 실제로 사실이 아니며 올바르게 기억하지 못했습니다. WHERE/AND 문제에 관해서는, 나는 정말로 확신하지 못합니다. – nico

1

당신은 예를

SELECT COUNT(r.id) , r.session_id 
FROM workshop_reservation r 
LEFT JOIN sessions s ON r.session_id = s.id 
AND r.reservation_status_id =0 
GROUP BY r.session_id 
3

당신은 하위 쿼리가 필요하지 않습니다를 들어 JOIN

를 사용해야합니다. 주어진 세션에 예약이 없거나 예약 수가 없을 때 0을 반환하는 간단한 GROUP BY를 사용할 수 있습니다.

SELECT s.id, count(r.id) 
FROM session AS 's' LEFT JOIN workshop_reservation AS `r` 
ON s.id=r.session_id 
GROUP BY s.id 
+0

+1 제가 그냥 작성되었다 ... – ircmaxell

0
select s.*, count(wr.id) as num from sessions as s 
    left join workshop_reservation as wr on wr.session_id = s.id 
group by s.id 
관련 문제