我在学生表中列出了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