MYSQL 按日期在行之间旋转


MYSQL rotate through rows by date

查询从不早于给定日期的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`

因此,在每个查询中,我从records中选择最旧的行min(date_created),并从records_query中返回比给定日期大>的下一个最旧的行。查询不断返回行,直到到达最新记录。此时返回同一行。如果到达最新行,我想返回最旧的行(从底部重新开始 - 一个完整的旋转)。使用 1 个查询怎么可能?

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

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

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