我检查了类似的问题,并尝试了依靠 IN
或 JOIN
的答案,但我无法弄清楚。
我正在努力实现以下目标:
- 允许用户选择特定的
question_area
- 允许用户在
question_area
内选择他或她想要的两个或多个难度级别的问题数量 - 最后,获取关联结果
我有以下查询(我使用的是 MySQL
5.6.17):
(SELECT question FROM question_active WHERE question_area = "B" AND
active_difficulty = 1 ORDER BY RAND() LIMIT 4)
UNION
(SELECT question FROM question_active WHERE question_area = "B" AND
active_difficulty = 2 ORDER BY RAND() LIMIT 3)
UNION
(SELECT question FROM question_active WHERE question_area = "B" AND
active_difficulty = 3 ORDER BY RAND() LIMIT 5)
我不知道它的效率如何,但它确实有效。但是,我遇到了两种情况:
- 我无法使用 PHP
PDO
类构建干净准备好的语句,因为我需要question_area
的三个唯一参数标记,即使它包含相同的值。
如 manual 中所述:
You must include a unique parameter marker for each value you wish to pass in to the statement when you call
PDOStatement::execute()
.
- 我将重复查询的大部分内容。事实上,我需要添加其他几个
WHERE
子句,这些子句对于所需的所有难度级别都是相同的。
我的问题是,如何在不重复自己的情况下构建查询,以便我可以使用 PDO
类。我只需要 SQL
部分的帮助,而不是 PHP。
我天真地希望有一种方法来构建单个查询并将 LIMIT
仅应用于某些 WHERE
子句。
我非常感谢您的帮助。谢谢!
最佳答案
$questions = [];
$sql = "SELECT question FROM question_active WHERE question_area = ?
AND active_difficulty = ? ORDER BY RAND() LIMIT ?";
$stmt = $pdo->prepare($sql);
foreach ([1,2,3] as $level)
{
$stmt->execute([$area, $level, $limit]);
$questions[$level] = $stmt->fetchAll();
}
关于mysql - 限制 SQL 语句 (MySQL) 中的特定 WHERE 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465466/