mysql - 检索 INSERT 的第 N 个子查询

标签 mysql subquery

摘要

从一个包含用户各种帖子的表格到一个论坛,另一个表格每天更新前 20 名的帖子。帖子存储在posts中,每日高分保存在hiscore中。

表格

posts:
   post_id(PK:INT) | user_id(INT) | ... | timestamp(TIMESTAMP)

hiscore:
   user_id(INT) | rank(INT)

Query

TRUNCATE TABLE `hiscore` ;
INSERT INTO `hiscore` (`user_id`,`rank`)
 (
   SELECT `user_id`, ???
   FROM `posts`
   WHERE `timestamp` BETWEEN blah AND blah
   GROUP BY `user_id`
   ORDER BY COUNT(`post_id`) DESC
   LIMIT 20
 )

实际问题

要在上述查询中插入什么而不是 ??? 来计算排名?

是否有像 @NTH_SUBQUERY 这样的变量会在第五次运行 SELECT 子查询时替代 5?


更新:hiscore 表应该 包含前 20 名发帖者。我知道表结构可以优化。答案的重点应该放在如何确定子查询的当前检索行上。

最佳答案

INSERT INTO `hiscore` (`user_id`,`rank`)
 (
   SELECT `user_id`, @rank = @rank + 1
   FROM `posts`, (SELECT @rank := 0) r
   WHERE `timestamp` BETWEEN blah AND blah
   GROUP BY `user_id`
   ORDER BY COUNT(`post_id`) DESC
   LIMIT 20
 )

关于mysql - 检索 INSERT 的第 N 个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832668/

相关文章:

MySQL 和文件管理 : reuse deleted IDs in future auto increment

MySql,计算多个组并创建 View

php - Laravel 5 加入同一张表

python - 使用 mysql 而不是 sqlite3

如果列不存在,MYSQL如何更改表

mysql - order by 和 group by 两者都在时间不工作

sql - 如果左连接表中的行为空,则使用另一行

postgresql - 来自 postgresql 查询的具有多个结果的除法

mysql - Laravel 中包含 insert into 和 where 子查询的复杂插入查询

Mysql 查询问题 - 插入选择连接