我是网站开发人员,我需要帮助进行分析:我的(未来)网站或多或少是别墅目录。人们可以在那里添加他们的别墅。每个别墅都将存储在数据库中。
我需要每页显示15个别墅,但我想要别墅的“翻身”(不确定这是正确的英文单词):每小时首页出现的别墅成为最后一页的最后一个别墅(所以每个别墅等级增加1,除了第一个成为最后一个)。我希望每个别墅都有相同的机会(或多或少)出现在第一页上。我不想要一个完全随机的系统。
我需要有关如何创建一个不占用大量资源的简单系统的帮助(应该使用数百万条记录)。
注意:我不想使用别墅的ID,因为如果一个人同时发布3个不同的别墅,它们将全部显示在彼此旁边。
我的主张: 我为每个别墅创建了一个名为“random_order”的字段(INTEGER),我在0到Max(INTEGER)之间放了一个随机数,我在“random_order”列上创建了一个索引。 然后按照我想要的顺序获取记录,我存储(dunno where)一个指向索引中记录的变量。然后每小时,我将此变量增加1(使用模数)。 我不是索引方面的专家,所以我不确定是否可以做到这一点以及如何做到这一点。我不知道是否有更好的方法来做到这一点......
如果这是正确的,或者你有更好的想法,请告诉我吗?
谢谢
答案 0 :(得分:0)
你可以做的另一件事是存储一个计数变量 - 从0到MAX,并不断更新。然后在服务器上查询前15个别墅(使用ORDER BY ASC/DESC
)(random_order + count)。这样可以防止每小时更新一次列 - 只需要更新count变量。
编辑:
首先,您将获得计数(从您存储它的位置)并将其存储在变量计数中。 然后执行类似
的查询SELECT *, (random_order + <count>)%MAX_VAL AS villa_order
FROM villa_table
ORDER BY villa_order ASC
LIMIT 15
这样可以防止对索引列进行不必要的不必要更新。
编辑2:
在进一步分析之后,这就是我将如何做到这一点。
执行简单的选择查询
SELECT * FROM villa_table
WHERE random_order > count
ORDER BY random_order
LIMIT 15
如果结果集中的行数是&lt; 15然后从头开始填写剩余的记录。
SELECT *
FROM villa_table
ORDER BY random_order ASC
LIMIT <number of rows to be filled>
即使在索引列上的20米行上,这也需要&lt; ,5S