php-mysql返回可变金额


php mysql return variable amounts

让我首先说,我编写php是一种爱好,并不了解很多。也就是说,我很难想出一种聪明的方法来执行特定类型的查询。

假设我有一个动态测试应用程序,它使用三个不同科目的试题数据库;200代数,100历史,50科学。用户可以选择他们希望在测试中有哪些科目和多少科目,也可以选择测试中有多少问题。

下面是我现在使用的工作代码。。。

$sql = "SELECT *
        FROM quiz
        WHERE keyword LIKE '$algebra'
        OR keyword LIKE '$history'
        OR keyword LIKE '$science'        
        ORDER BY RAND() LIMIT $amount";

然而,这个代码的唯一问题是,如果我在考试中选择10道题,我将主要有代数题,一些历史题,没有科学题。我希望每个被选中的科目都有平等的代表性。

我想我可能在这个项目上吃得太多了。

只是猜测:

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