MYSQL按日期按行旋转

时间:2012-08-09 00:24:52

标签: php mysql

查询选择records表中不早于给定日期的最旧行。给定日期是我从records_queue表中查询的最后一行。查询的目标是旋转从旧到新的行,每次为每个用户返回1行。

SELECT `records`.`record_id`, MIN(records.date_created) as date_created 
FROM (`records`) 
JOIN `records_queue` ON `records_queue`.`user_id` = `records`.`user_id` 
AND record_created > records_queue.record_date 
GROUP BY `records_queue`.`user_id`

因此,在每个查询中,我从min(date_created)中选择最早的行records,并返回比>中给定日期更大的records_query的最旧行。查询保持返回行,直到它到达最新记录。此时返回相同的行。如果到达最新的行,我想返回最旧的行(从底部再次开始 - 一个完整旋转)。如何使用1个查询?

1 个答案:

答案 0 :(得分:1)

根据您发布的代码,发生了两件事之一。要么这个查询返回一个完整的记录集,然后你的应用程序可以使用它自己的逻辑遍历(如果页面没有重新加载或者将参数传递给PHP代码,那么这可能是javascript的一些变体,然后用于选择哪个记录以显示每次页面是否重新加载),或者应用程序正在更新records_queue.record_date以恢复下一条记录 - 尽管我看不到仅在您发布的查询中提取单条记录的任何限制。

无论哪种方式,您都需要修改应用程序逻辑,而不是此查询以实现您要求的结果。

编辑:在更新队列的代码部分中,快速检查records_queue.record_date中的值是否等于最新记录。如果它运行类似于update records_queue set record_date = (select min(theDateColumn from records)而不是当前逻辑,它只是在查看当前日期时更新它。