Сначала я получу 10 пользователей, затем выполню соединения.Для этого есть две причины:
- Поскольку вам не нужны конкретно 10 результатов, а только результаты 10 пользователей, которые могут содержать любое количество строк, вы не можете получить все данные, а затем ограничить их.иначе вы можете получить 10 строк, содержащих данные для 5 пользователей;
- Даже если точка 1 была неактуальной, потому что всегда была связь 1-1, и особенно, если число результатов невелико, например, 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 добавлено для получения второй страницы результатов;первая страница не требует этого или будет OFFSET 0
.Затем, конечно, LIMIT, чтобы ограничить размер страницы.
Я также реструктурировал объединения таким образом, чтобы это имело больше смысла для меня.