0

我正在使用 PHP , MySQL 以下
我有两个表

  1. 用户
  2. users_messages

“users”表存储所有用户的记录。

身份证名称密码
1 XYZ XYZ

[这里的id其实就是user_id]

“messages”表包含用户发布的消息

id user_id 消息
1 1 XYZ

“users”表包含数千条记录(>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 开始的,开始是随机的,而是从下一条记录开始自动递增。

4

1 回答 1

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;
于 2013-01-01T13:46:04.600 回答