MySQL中的简单评级系统

时间:2012-01-21 20:40:42

标签: php mysql ranking

假设我正在运行一个小投票计数器产品。这些值存储在数据库“content”中,其中一行包含投票数(“count”),我还有一行称为“rank”,我如何自动调整这些值以便我不必迭代通过PHP中的每一个,导致脚本速度极慢?

2 个答案:

答案 0 :(得分:2)

如果你在表格中有这样的结构

项 使用字段:name,id,count,...

你可以这样做:

在ID = $ id

的项目中进行投票
UPDATE item SET count = count + 1 WHERE id='$id';

在ID = $ id

的项目中向下投票
UPDATE item SET count = count - 1 WHERE id='$id';

count将存储总票数。

如果您想检查每个用户/ IP是否避免多次投票,您应该将每个投票存储在另一个表中,并在发送之前的查询之前检查此附加表是否有重复投票。

答案 1 :(得分:0)

这样的事情(取决于你确切的表格结构)应该有效:

UPDATE item SET rating = 
   (SELECT count(*) FROM rates WHERE type 'positive') - 
   (SELECT count(*) FROM rates WHERE type 'negative');

有关详细信息,请查看MySQL docs