我很难完成这个非常简单的项目。也许是因为星期一,我不确定。
我有一个看起来像这样的表:
id | weight | hits
------------------------------------------------
1 | 4 | 0
2 | 1 | 0
3 | 2 | 0
显然,每次选择特定记录时,hits列将增加1(我们将在PHP脚本中运行此更新)。
我怎样才能最好地按重量检索这些记录?我的意思是,如果我运行了15次查询,我希望返回以下ID:
1
1
1
1
3
3
2
1
1
1
1
3
3
2
1
我们有一个简单的公式,我们上网检索随机加权结果,但我们没有运行足够的公式来统计平衡结果,所以我们需要进行如上所述的简单旋转。
我知道这是一个很难解决的问题,但我现在很难想出今天最好的方法。
我希望在描述问题时我已经足够清楚了。
答案 0 :(得分:1)
除非我遗漏了某些东西(毕竟这是星期一),你不能只按hits / weight
和LIMIT 1
排序吗?
答案 1 :(得分:0)
执行命令
SELECT id FROM tbl WHERE weight - hits > 0 ORDER BY weight DESC LIMIT 0,1
使用上一个结果,运行:
UPDATE tbl SET hits = hits + 1, total_hits = total_hits + 1 WHERE id = (THE RESULT);
然后运行
SELECT (Sum(weight-hits)) FROM tbl
如果result = 0
UPDATE tbl SET hits = 0
修改强>
可以通过两个查询来实现:
$query="SELECT id FROM tbl, weight - hits AS diff WHERE weight - hits > 0 ORDER BY weight DESC";
$result=mysql_query($query);
$num=mysql_numrows($result);
$i=0;
$id=mysql_result($result,$i,"id");
$diff =0;
while ($i < $num) {
$diff= $diff + mysql_result($result,$i,"diff");
++$i;
}
if( $diff = 1 and $i = 1);
$query2="UPDATE tbl SET hits = 0, total_hits = total_hits + IF(id='$id',1,0)";
else{
$query2="UPDATE tbl SET hits = hits + 1, total_hits = total_hits + 1 WHERE id = '$id'";
}
mysql_query($query2);