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 的调整系数可能会给科学带来更好的机会。