我有一个mysql表,我在其中存储一个列(名为tickets
),tickets
值可以是任意数字。
我想要做的是有一个mysql查询,它从列中选择所有行,按降序对它们进行排序,然后使用PHP来“加权”查询的结果,以便使用最高tickets
值被选中的可能性更高。
这听起来很混乱。基本上,一行中tickets
的数量越多,被挑选的可能性就越大。
无论如何使用程序mysqli选择行和PHP来获取票证吗?
答案 0 :(得分:0)
因此查询本身不会得到你想要的东西,这本质上是一个加权随机选择。听起来你需要做的就是选择所有的行并将它们放在一个数字索引的数组中,其中X行数量的行在数组中放置X次不同的索引。然后随机选择0和[ARRAY_SIZE - 1]之间的数字来确定您选择的行。
因此查询可能如下所示:
SELECT id, tickets FROM table
id
将成为表格的主键。
代码可能如下所示:
// your DB query logic here
// proceed with following code only if non-empty result set is returned
// build the array
$selection_array = array();
while($row = /* your DB row fetch mechanism here */) {
$temp = array_fill(0, (int)$row['tickets'], $row['id']);
$selection_array = array_merge($selection_array, $temp);
}
// select value from array
$random = rand(0, count($selection_array) - 1);
$selected_id = $selection_array[$random];
答案 1 :(得分:0)
嗯,只是一个想法......;)
您可以将tickets
值乘以随机值...
... ORDER BY tickets*RAND() DESC
通过这种方式,您可以获得订购的记录,而不是每个说明的票号,而是修改后的号码......
RAND()
将为检查的每一行返回不同的随机值,但由于原始数字较高,结果也可能更高。