0

我在这个非常简单的项目上遇到了困难。也许是因为今天是星期一,我不确定。

我有一个看起来像这样的表:

id        |        weight        |    hits
------------------------------------------------
    1     |         4            |     0
    2     |         1            |     0
    3     |         2            |     0

显然,每次选择特定记录时,命中列都会增加 1(我们将从 PHP 脚本中运行此更新)。

我怎样才能最好地按重量检索这些记录?我的意思是,如果我运行查询 15 次,我希望返回以下 ID:

1
1
1
1
3
3
2
1
1
1
1
3
3
2
1

我们有一个简单的公式,我们在网上找到了一个随机加权的结果,但是我们没有运行足够的公式来统计平衡结果,所以我们需要像上面描述的那样做一个简单的旋转。

我知道这是一个很容易解决的问题,但我今天很难想出最好的方法。

我希望我对问题的描述已经足够清楚了。

4

2 回答 2

1

除非我遗漏了一些东西(毕竟这里也是星期一),否则你不能按hits / weightand排序LIMIT 1吗?

于 2013-01-14T21:10:39.767 回答
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

如果结果 = 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);
于 2013-01-14T20:43:13.377 回答