我正在尝试从我的数据库中获取符合特定条件的十行数据。我正在尝试让在数据库中注册的前十个用户参加一门课程,但我也希望从数据库中获得参加该课程的用户总数。我知道使用limit只能返回十个用户,但有什么方法可以避免做两个查询,以便获得参加课程的用户总数。我目前的疑问如下。
SELECT * FROM users, user_courses
WHERE users.id = user_courses.user_id AND user_courses.CRN = '$CRN'
答案 0 :(得分: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 ...
答案 1 :(得分:0)
select @max,result.* from (
SELECT @sno:=@sno+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
答案 2 :(得分: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