2013-07-22 44 views
1

我試圖從我的數據庫中獲得滿足特定條件的十行數據。我試圖讓在數據庫中註冊的前十名用戶參加課程,但我也想從數據庫中獲取參加課程的用戶總數。我知道使用限制來返回只有十個用戶,但有什麼辦法可以避免做兩個查詢,以獲得參加課程的用戶總數。我目前的查詢如下。我可以在沒有兩個查詢的情況下做到這一點嗎?

SELECT * FROM users, user_courses 
WHERE users.id = user_courses.user_id AND user_courses.CRN = '$CRN' 
+1

而不必每次檢索完整數據集和腳本內限制其執行不能在單個查詢做到這一點查詢。只需做2個單獨的查詢。還要小心包括變量,如你所做的,確保它們正確地逃脫等。 –

+0

在其他數據庫中,你可以使用Window查詢來做到這一點,但使用MySQL我認爲這是不可能的。 – Wolph

+0

檢查這個問題,它會給你一個答案: http://stackoverflow.com/questions/2439829/how-to-count-all-rows-when-using-select-with-limit-in- mysql-query – Pieter

回答

1

您可以使用UNION語句。

SELECT users.id FROM users, user_courses 
WHERE users.id = user_courses.user_id AND user_courses.CRN = '$CRN' LIMIT 10 
UNION SELECT count(*) FROM USERS ... 
+0

注意列的數量和類型匹配。我希望在這種情況下'users.id'是一個整數。 –

+0

這不會返回預期值 –

+0

現在好了嗎?不知道你的意思。 –

0
select @max,result.* from (
SELECT @sno:[email protected]+1 ,users.*,user_courses.* FROM users, user_courses ,(select @sno:=0) as initSno 
WHERE users.id = user_courses.user_id AND user_courses.CRN = '$CRN' 
) result,(select @max:=max(@sno)) as maxNo 
+0

如果你正在這樣做,你還可以計算記錄數,因爲你不限制記錄集 –

0

雖然你可以這有一個查詢,我認爲在這種情況下,使用兩個查詢是更好的。它簡化了你的代碼,查詢可能也會更快。

如果兩個單獨的查詢太慢,您可能需要users.id和user_courses.user_id的索引或主鍵。

SELECT COUNT(*) 
FROM users, user_courses 
WHERE users.id = user_courses.user_id 
AND user_courses.CRN = '$CRN' 

SELECT * 
FROM users, user_courses 
WHERE users.id = user_courses.user_id 
AND user_courses.CRN = '$CRN' 
LIMIT 10 
相關問題