你可以使用这个 MySQL 查询:
SELECT *
FROM Bungalows
WHERE id = (
SELECT b1.id
FROM
Bungalows b1 LEFT JOIN Bungalows b2
ON b1.id>b2.id AND b2.featured=1
WHERE
b1.featured=1
GROUP BY
b1.id
HAVING
COUNT(b2.id) = (SELECT
DATEDIFF(CURDATE(), '2013-05-06') MOD
(SELECT COUNT(*) FROM Bungalows WHERE Featured=1))
)
请在此处查看小提琴。'2013-05-06' 是您想要开始展示第一个特色平房的日子。它们将按 ID 排序显示,从“2013-05-06”开始。
编辑
以下查询将返回自 2013-05-06 以来经过的天数:
SELECT DATEDIFF(CURDATE(), '2013-05-06')
MOD 函数将返回经过天数除以特征行数的整数余数:
SELECT DATEDIFF(CURDATE(), '2013-05-06') MOD
(SELECT COUNT(*) FROM Bungalows WHERE Featured=1)
如果有 6 个特色平房,则第一天返回 0,第二天返回 1,2,3,4,5,然后再次返回 0,1,2...。
MySQL 没有返回 RANK(行数)的函数,因此您必须以某种方式模拟它。我是这样模拟的:
SELECT b1.id, COUNT(b2.id)
FROM
Bungalows b1 LEFT JOIN Bungalows b2
ON b1.id>b2.id AND b2.featured=1
WHERE
b1.featured=1
GROUP BY
b1.id
我正在加入 Bungalows 表。bungalow ID 的排名是 ID 小于该 ID 的 bungalow 的数量(因此连接 b1.id>b2.id)。
然后,我只选择上面函数返回 RANK 的行:
HAVING COUNT(b2.id) = (SELECT DATEDIFF(CURDATE(), '2013-05-06') MOD (SELECT COUNT(*) FROM Bungalows WHERE Featured=1))
如果您使用 MySQL,我的初始查询可以简化为:
SELECT b1.*
FROM
Bungalows b1 LEFT JOIN Bungalows b2
ON b1.id>b2.id AND b2.featured=1
WHERE
b1.featured=1
GROUP BY
b1.id
HAVING
COUNT(b2.id) = (SELECT
DATEDIFF(CURDATE(), '2013-05-06') MOD
(SELECT COUNT(*) FROM Bungalows WHERE Featured=1))