2011-11-06 52 views
0

我設立,有一個限制的,可以爲一療程註冊人量的數據庫。在我的課程表中,我有一個最大列,其中包含一個int,並在我的註冊表中包含該課程的所有註冊人員。所以我的網頁只能顯示當然時間允許地方在課程表中登記的人在登記表<最大數量。繼承人我當前的查詢。SQL計數(),試圖從兩個表中計算行和限制信息顯示

SELECT course.time,COUNT(registered.time),registered.maximum FROM course 
JOIN (registered) 
ON course.type = 'computing' OR 
(registered.type = 'computing' AND course.time = registered.time) 
GROUP BY course.time 
HAVING COUNT(registered.time) < course.maximum 

的問題,這是它所有的註冊人,無論課程時間的計算,所以如果有2人不同時間登記也應算做是2人每次註冊。

希望我解釋就OK了,希望有人能幫忙。由於

回答

0

這是我不清楚爲什麼你registered.maximumcourse.maximum。它會更容易回答的問題,如果我們知道實際的表結構,而不是基於你的代碼去猜測。但這裏有雲:

SELECT course.time, COUNT(registered.time), registered.maximum 
FROM course 
    JOIN registered 
    ON course.type = registered.type 
    AND course.time = registered.time 
WHERE course.type = 'computing' 
GROUP BY course.time, registered.maximum 
HAVING COUNT(registered.time) < course.maximum 

我還做了一組由registered.maximum,因爲你會得到一個語法錯誤,否則。

最後,我改變了加盟是對類型,然後將其添加到WHERE子句。對我而言,這總是更有意義,但有時可能會更慢。從我的角度來看,JOIN子句僅用於連接,而WHERE子句用於過濾。

UPDATE:也得到了課程,沒有人註冊:

SELECT course.time, COUNT(registered.time), course.maximum 
FROM course 
    LEFT OUTER JOIN registered 
    ON course.type = registered.type 
    AND course.time = registered.time 
WHERE course.type = 'computing' 
GROUP BY course.time, course.maximum 
HAVING COUNT(registered.time) < course.maximum 
+0

對不起我的約registered.maximum誤,應改爲course.maximum。我只寫了查詢,但如果沒有人註冊它,它仍然不顯示可用插槽。桌子佈置在課程中:字段是時間/類型/最大值和已註冊:字段是類型/時間 – James

+0

雖然這是一個不同的問題,對吧?爲了獲得沒有人註冊的課程,你需要一個外連接。我會將其添加到我的答案中。 – MJB