我使用PHP,MySQL用于以下
我有两张桌子
表“users”存储所有用户的记录。
id name password 1 XYZ XYZ
[这里的id实际上是user_id]
表“messages”包含用户发布的消息
id user_id messages 1 1 XYZ
“用户”表包含数千条记录(> 5000)
“users_messages”包含大约100条记录(将保持不变)
我正在尝试获取所有用户的消息并将其显示在表中。 目前我正在尝试对它们进行分页,因此我只需要一个页面加载20个用户。
我的查询如下
SELECT u.username as username,u.id as id, COUNT( f.user_id ) AS no_of_messages
FROM users AS u
LEFT JOIN users_messages AS f ON f.user_id = u.id
GROUP BY u.id LIMIT 20
这有效,但需要很长时间......可能会扫描完整的表只是为了得到只有20个用户的消息。
表“users”的id列不是从1开始,开始是随机的,但它会从下一条记录自动递增。
答案 0 :(得分:0)
表“users”的id列不是从1开始,开头是 随机
请改为尝试:
SELECT
u.username as username,
u.id as id,
f.no_of_messages
FROM users AS u
LEFT JOIN
(
SELECT user_id, COUNT(*) no_of_messages
FROM users_messages
GROUP BY user_id
) AS f ON f.user_id = u.id
ORDER BY u.id
LIMIT 20;