我正在尝试从我的数据库中获取十行满足特定条件的数据。我试图让在数据库中注册的前十个用户参加课程,但我也想从数据库中获取参加课程的用户总数。我知道使用限制只返回十个用户,但是有什么办法可以避免进行两次查询,以便同时获得参加课程的用户总数。我当前的查询如下。
SELECT * 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'
您可以使用 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 ...
虽然您可以使用一个查询来做到这一点,但我认为在这种情况下,使用两个查询会更好。它简化了您的代码,并且查询也可能会更快。
如果两个单独的查询太慢,您可能需要 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
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