我在學生表中列出了students
,並在students_courses
表中列出了他們的課程,並且這些課程中的每一個都可能處於活動狀態或不活動狀態。
我想知道是否有快速找到「活動」用戶的方法,這意味着他們至少有1個活動課程(sc。active
= 1)以及非活動用戶。非活躍用戶是那些沒有課程(沒有一排)或他們的所有課程都是active
= 0使用MySQL查詢查找在線學生和非在線學生
我也想獲得實際列表之前的行數。
在此先感謝
我在學生表中列出了students
,並在students_courses
表中列出了他們的課程,並且這些課程中的每一個都可能處於活動狀態或不活動狀態。
我想知道是否有快速找到「活動」用戶的方法,這意味着他們至少有1個活動課程(sc。active
= 1)以及非活動用戶。非活躍用戶是那些沒有課程(沒有一排)或他們的所有課程都是active
= 0使用MySQL查詢查找在線學生和非在線學生
我也想獲得實際列表之前的行數。
在此先感謝
,因爲它使用子查詢,但假設你有一個字段studentId
您可以使用此此查詢可能會有點慢:
SELECT
students.*,
IF (
studentId IN (
SELECT
studentId
FROM
students_courses
WHERE
active=1
),1,0) AS hasCourses
FROM
students
SELECT sum(students_courses.active) as sum, student_id FROM
students JOIN students_courses
ON students.student_id = students_courses.student_id
GROUP BY students_courses.student_id
如果總和= 0,這意味着沒有課程 並且其大於0表示一些課程
對於不活躍的用戶獲得所有不在student_course中的student_id
SELECT student_id FROM students WHERE student_id NOT IN
(SELECT DISTINCTROW student_id FROM students)
謝謝,我這樣做,但我不想在PHP中做。我把它計算在mysql中。 「HAVING'不會計數(...) – Sallar 2012-04-15 10:46:07
是的,那麼HAVING是最好的選擇...... – 2012-04-15 10:48:18
目前尚不清楚您是在兩個單獨的查詢中還是在一個查詢中(在這種情況下,行數將會是* all * students)。 – liquorvicar 2012-04-15 10:55:39
@liquorvicar我不想在兩個查詢中。一個用於獲取所有行。一個用於計算它們 – Sallar 2012-04-15 11:20:42
您不需要兩次查詢就可以獲取數據並計算出多少行。您有兩種選擇:在一個查詢中獲取所有數據(活躍和非活動學生)並在您的應用程序中計數(即使用PHP),或者在單獨的查詢中獲得活躍和不活躍的學生,並分別計算每個查詢的結果。 – liquorvicar 2012-04-15 11:27:45