我有一个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];

10-08 04:34