gpt4 book ai didi

php - SQL如果随机结果的值小于X,返回更多随机结果直到达到X值?

转载 作者:行者123 更新时间:2023-11-29 02:28:20 25 4
gpt4 key购买 nike

我有一个表 (MySql),其中一列是 -3 到 3 之间的“值”。我正在尝试做的是:

  1. 如果它的“值”是正数(在我的例子中是 1 到 3 - 负值将用于其他用途且与此处无关),则从表中随机抽取一行
  2. 如果“值”为 3,则仅显示该行。
  3. 如果“值”为 2,则显示该行,加上另一个“值”为 1 的随机行。
  4. 如果“值”为 1,则显示该行,再加上“值”为 2 的一行,或另外 2 行,每行“值”为 1。

或者,换句话说,我需要列出行,直到它们的总值为 3 - 通过值为 3 的一行、值为 1 和 2(或 2 和 1)的两行来完成,或每行值为 1 的三行。

这是我所拥有的:

$query = "SELECT * FROM $usertable WHERE Value>0 ORDER BY RAND() LIMIT 1"; //from all positive Values, get one at random
$query2 = "SELECT * FROM $usertable WHERE Value BETWEEN 1 AND 2 ORDER BY RAND() LIMIT 1"; //from all Values between 1 and 2, get one at random
$query3 = "SELECT * FROM $usertable WHERE Value=1 ORDER BY RAND() LIMIT 1"; //from all Values equal to 1, get one at random
$result = mysql_query($query);
$result2 = mysql_query($query2);
$result3 = mysql_query($query3);

while($row = mysql_fetch_array($result))
{
echo $row['A'] . " " . $row['B'] . " " . $row['C'] . " " . $row['Value'];
echo "<br>";
}
while($row['Value']<3)
{
while($row2 = mysql_fetch_array($result2))
{
echo $row2['A'] . " " . $row2['B'] . " " . $row2['C'] . " " . $row2['Value'];
echo "<br>";
}
}
while($row['Value'] + $row2['Value']<3)
{
while($row3 = mysql_fetch_array($result3))
{
echo $row3['A'] . " " . $row3['B'] . " " . $row3['C'] . " " . $row3['Value'];
echo "<br>";
}
}

我尝试以不同的顺序放置 while 语句,但我不断收到意外的 T_WHILE 错误。

按照我现在的方式,代码将运行并超时并出现此错误:“ fatal error :超过 30 秒的最大执行时间”并且它没有执行我需要的操作(如果第一个“值”是 3,它仍然会得出结果)。

谁能指出我做错了什么?必须有比我正在做的更好的方法来完成这种情况,但我只是没有看到它。有人能指出我正确的方法吗?谢谢!

最佳答案

您可以在 SQL 中执行此操作。诀窍是处理你有 2 + 2 的情况。你必须忽略第二个。

下面通过定义一个 @sum 变量来处理这个问题。这会根据需要增加 value,并进行一次扭转。如果该值未达到 3,则忽略该行:

select t.*,
@sum := if(@prevsum := @sum < 3 and @sum + value > 3, @sum, @sum + value) as thesum
from (select *
from t
where value > 0
order by RAND()
) t cross join
(select @sum := 0, @prevsum := 0) const
having (@sum - value) <= 3 and (@prevsum <> @sum)

这会维护 @prevsum​​,因此它知道在“2 + 2”或“1 + 1 + 2”这样的情况下忽略最后一行。

关于php - SQL如果随机结果的值小于X,返回更多随机结果直到达到X值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com