我有一个mysql表,其中存储一列(称为tickets
),并且tickets
值可以是任何数字。
我想做的是有一个mysql查询,该查询从列中选择所有行,以降序对其进行排序,然后使用PHP对查询结果进行“加权”,以使价值更有被选择的机会。
这听起来很混乱。本质上,tickets
行的数量越多,被选择的机会就越高。
无论如何,可以使用程序化mysqli选择行并使用PHP获取票证来执行此操作吗?
最佳答案
因此,查询本身并不能为您提供所需的信息,这实际上是加权随机选择。听起来您需要做的是选择所有行并将其放入数字索引的数组中,其中X票证的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];