php mysql return 可变金额
php mysql return variable amounts
首先让我先说我编码 php 是一种爱好,并不了解很多。也就是说,我在想出一种执行特定类型查询的巧妙方法时遇到了麻烦。
假设我有一个动态测验应用程序,它使用三个不同科目的试题数据库; 200 代数,100 历史,50 科学。用户可以 select 他们希望在测验中包含哪些主题和多少个主题,还可以选择将在测验中包含多少个问题。
下面是我现在使用的工作代码...
$sql = "SELECT *
FROM quiz
WHERE keyword LIKE '$algebra'
OR keyword LIKE '$history'
OR keyword LIKE '$science'
ORDER BY RAND() LIMIT $amount";
然而,此代码的唯一问题是,如果我 select 我的考试有 10 个问题,我将主要有代数问题,一些历史问题,没有科学问题。我希望每个主题 selected 都能平等地代表。
我想我在这个项目上可能已经忍无可忍了。
猜一猜:
$equal = $amount/3; // do your best to round this...
$sql = "SELECT * FROM quiz WHERE keyword LIKE '$algebra' ORDER BY RAND() LIMIT $equal
UNION
SELECT * FROM quiz WHERE keyword LIKE '$history' ORDER BY RAND() LIMIT $equal
UNION
SELECT * FROM quiz WHERE keyword LIKE '$science' ORDER BY RAND() LIMIT $equal";
@poozolax 给了你一个精确的解决方案。
你可以得到另一个尝试通过做这样的事情来补偿分配:
$sql = "SELECT * FROM
(SELECT *,
case
when keyword like '$algebra' then 350/200
when keyword like '$history' then 350/100
when keyword like '$science' then 350/50
end * RAND() as ORD
FROM quiz
WHERE keyword LIKE '$algebra'
OR keyword LIKE '$history'
OR keyword LIKE '$science'
) AS X ORDER BY ORD DESC LIMIT $amount";
我不知道默认值 RAND()
是否最好均匀分布,但是 350/50 的调整系数可能会给科学带来更好的机会。
首先让我先说我编码 php 是一种爱好,并不了解很多。也就是说,我在想出一种执行特定类型查询的巧妙方法时遇到了麻烦。
假设我有一个动态测验应用程序,它使用三个不同科目的试题数据库; 200 代数,100 历史,50 科学。用户可以 select 他们希望在测验中包含哪些主题和多少个主题,还可以选择将在测验中包含多少个问题。
下面是我现在使用的工作代码...
$sql = "SELECT *
FROM quiz
WHERE keyword LIKE '$algebra'
OR keyword LIKE '$history'
OR keyword LIKE '$science'
ORDER BY RAND() LIMIT $amount";
然而,此代码的唯一问题是,如果我 select 我的考试有 10 个问题,我将主要有代数问题,一些历史问题,没有科学问题。我希望每个主题 selected 都能平等地代表。
我想我在这个项目上可能已经忍无可忍了。
猜一猜:
$equal = $amount/3; // do your best to round this...
$sql = "SELECT * FROM quiz WHERE keyword LIKE '$algebra' ORDER BY RAND() LIMIT $equal
UNION
SELECT * FROM quiz WHERE keyword LIKE '$history' ORDER BY RAND() LIMIT $equal
UNION
SELECT * FROM quiz WHERE keyword LIKE '$science' ORDER BY RAND() LIMIT $equal";
@poozolax 给了你一个精确的解决方案。 你可以得到另一个尝试通过做这样的事情来补偿分配:
$sql = "SELECT * FROM
(SELECT *,
case
when keyword like '$algebra' then 350/200
when keyword like '$history' then 350/100
when keyword like '$science' then 350/50
end * RAND() as ORD
FROM quiz
WHERE keyword LIKE '$algebra'
OR keyword LIKE '$history'
OR keyword LIKE '$science'
) AS X ORDER BY ORD DESC LIMIT $amount";
我不知道默认值 RAND()
是否最好均匀分布,但是 350/50 的调整系数可能会给科学带来更好的机会。