如何在Mysql数据库记录上进行营业额

时间:2011-11-25 12:13:29

标签: mysql

我是网站开发人员,我需要帮助进行分析:我的(未来)网站或多或少是别墅目录。人们可以在那里添加他们的别墅。每个别墅都将存储在数据库中。

我需要每页显示15个别墅,但我想要别墅的“翻身”(不确定这是正确的英文单词):每小时首页出现的别墅成为最后一页的最后一个别墅(所以每个别墅等级增加1,除了第一个成为最后一个)。我希望每个别墅都有相同的机会(或多或少)出现在第一页上。我不想要一个完全随机的系统。

我需要有关如何创建一个不占用大量资源的简单系统的帮助(应该使用数百万条记录)。

注意:我不想使用别墅的ID,因为如果一个人同时发布3个不同的别墅,它们将全部显示在彼此旁边。

我的主张: 我为每个别墅创建了一个名为“random_order”的字段(INTEGER),我在0到Max(INTEGER)之间放了一个随机数,我在“random_order”列上创建了一个索引。 然后按照我想要的顺序获取记录,我存储(dunno where)一个指向索引中记录的变量。然后每小时,我将此变量增加1(使用模数)。 我不是索引方面的专家,所以我不确定是否可以做到这一点以及如何做到这一点。我不知道是否有更好的方法来做到这一点......

如果这是正确的,或者你有更好的想法,请告诉我吗?

谢谢

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