在同一查询中使用 OR 和 AND 查询问题

Posted

技术标签:

【中文标题】在同一查询中使用 OR 和 AND 查询问题【英文标题】:Query issue using OR and AND within the same query 【发布时间】:2017-06-30 14:20:13 【问题描述】:

我希望创建一个简单的查询,以显示类别 ID 与数据库中的“类别”或“类别_2”列同时匹配品牌的所有产品。

我需要在同一个查询中使用 OR 和 AND。

这是我当前运行良好的查询:

$all="SELECT * FROM models WHERE category = " . $category['id'] . " AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

这就是我想要达到的目标:

$all="SELECT * FROM models WHERE category = " . $category['id'] . " OR category_2 = " . $category['id'] . " AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

但是,对于新查询,我所做的 AND 品牌部分不起作用。

【问题讨论】:

您的代码容易受到 SQL 注入的攻击。请学会使用prepared statements。 WHERE categoryID IN (category, category_2) ... @tereško 如果不是用户输入而是先前选择的结果,则不是。 检查我的答案 @vaso123 只是让注射变得有点困难。 【参考方案1】:

这很容易发生sql注入你应该使用mysqli。试试这个方法:

$query = "SELECT column1,column2,column 3 FROM models WHERE (category = ? OR categeory_2 = ?) AND brand_name = ? ORDER BY year DESC, month DESC";
$stmt = $conn->prepare($query);
$stmt->bind_param("sss",$category['id'],$category['id'],$band_name['id']);
$stmt->execute();
$stmt->bind_result($col1,$col2,$col1);
$stmt->fetch();

【讨论】:

【参考方案2】:

你需要对你的逻辑进行分组:

$all="SELECT * FROM models 
WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ")
AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

【讨论】:

【参考方案3】:

尝试添加()

$all="SELECT * 
FROM models 
WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ")
AND brand = ". $brand_name['id'] ." 
ORDER BY year DESC, month DESC";

【讨论】:

【参考方案4】:

您需要做的就是在 OR 条件周围放置括号。

$all="SELECT * FROM models WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ") AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

【讨论】:

【参考方案5】:

只需将您的 or 条件放在 brackets 中,这样它们就会被摸索并可以被视为单个条件,然后 AND 带有第二个条件

$all="SELECT * FROM models 
WHERE (category = " . $category['id'] . " OR category_2 = " . $category['id'] . ")
AND brand = ". $brand_name['id'] ." ORDER BY year DESC, month DESC";

【讨论】:

以上是关于在同一查询中使用 OR 和 AND 查询问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 mysqli 在同一查询中选择和插入/更新

在同一查询中使用 SUM 和 DISTINCT

关于在同一查询中使用@eq 和@paginate 进行数据搜索的问题

你可以在同一个查询中使用 NOT IN 和 NOT EXISTS 吗?

GraphQL:在同一查询中使用输入类型及其字段之一

在同一个 SQL 查询中使用 rank() 和 count()