gpt4 book ai didi

php - 显示数据库中的特色项目

转载 作者:IT老高 更新时间:2023-10-29 00:11:40 25 4
gpt4 key购买 nike

我有如下的数据库表。

id, bungalow_name, type, address, featured 

平房可以在主页上展示。如果平房有特色,featured 列的值为 1。我在表中有 50 间平房,并且在给定时间有 5-7 间平房。

假设特色洋房名称如下。

bungalow 1, bungalow 2, bungalow 3, .........., bungalow 6

我想做的是每天在主页上显示一个特色平房。我想每个月都像下面这样循环。鉴于我不想为每个页面加载随机显示一个平房。我想每天展示一间平房。

today              -> bungalow 1
tomorrow -> bungalow 2
day after tomorrow -> bungalow 3
...
After bungalow 6, bungalow 1 is shown on the next day.

我该怎么做?甚至可以使用 SQL/PHP 吗?

最佳答案

您可以使用这个 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))
)

请参阅 fiddle here . '2013-05-06'是要开始展示第一间特色洋房的日子。它们将按 ID 顺序显示,从“2013-05-06”开始。

编辑

以下查询将返回自 2013 年 5 月 6 日以来经过的天数:

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 表。平房 ID 的排名是 ID 小于该 ID 的平房的数量(因此连接 b1.id>b2.id)。

然后我只选择具有上述函数返回的 RANK 的行:

拥有 计数(b2.id)=(选择 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))

关于php - 显示数据库中的特色项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com