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 / weightLIMIT 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

編集:

次の 2 つのクエリで作成できます。

$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 に答える