在 SQL 语句 (MySQL) 中限制特定的 WHERE 子句?
Limit specific WHERE clauses in a SQL statement (MySQL)?
我检查了类似的问题并尝试依赖 IN
或 JOIN
的答案,但我无法弄清楚。
我正在努力完成以下任务:
- 允许一个人select特定的
question_area
- 允许一个人 select 他或她想要的问题数量
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
class 构建 clean 准备语句,因为我需要三个独特的参数标记 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
class。我只需要 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();
}
我检查了类似的问题并尝试依赖 IN
或 JOIN
的答案,但我无法弄清楚。
我正在努力完成以下任务:
- 允许一个人select特定的
question_area
- 允许一个人 select 他或她想要的问题数量
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
class 构建 clean 准备语句,因为我需要三个独特的参数标记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
class。我只需要 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();
}