我在数据库中有几个表。 用户,个人资料和用户角色。 配置文件和用户之间的一对一关系。 角色和用户之间的关系是多对多的。
要选择所有用户,我发送以下请求:
SELECT A.role_id, A.role_name, A.user_id,B.user_username, B.user_password, B.profile_color_text, B.profile_color_menu, B.profile_color_bg FROM
(SELECT Roles.role_id, Roles.role_name, UserRoles.user_id
FROM Roles INNER JOIN UserRoles ON Roles.role_id = UserRoles.role_id) AS A
LEFT JOIN
(SELECT Users.user_username, Users.user_password, Profiles.profile_color_text, Profiles.profile_color_menu, Profiles.profile_color_bg, Profiles.profile_id
FROM Users INNER JOIN Profiles ON Users.user_id = Profiles.profile_id) AS B
ON A.user_id = B.profile_id;
问题是如何选择分页?
答案 0 :(得分:0)
我将首先获得10个用户,然后执行联接。这样做的两个原因:
。
SELECT
u.user_id,
u.user_username,
u.user_password,
r.role_id,
r.role_name,
p.profile_id,
p.profile_color_text,
p.profile_color_menu,
p.profile_color_bg
FROM (
SELECT user_id, user_username, user_password
FROM users
ORDER BY ???
OFFSET 10
LIMIT 10
) AS u
LEFT JOIN profiles AS p
ON u.user_id = p.profile_id
LEFT JOIN userroles AS ur
ON u.user_id = ur.user_id
LEFT JOIN roles AS r
ON ur.role_id = r.role_id
我假设您需要一些订单,所以我在其中输入了ORDER BY-完成。
添加偏移以获得第二页结果;第一页不需要它,也可以是OFFSET 0
。然后使用LIMIT当然可以限制页面大小。
我还以对我来说更有意义的方式重组了联接。