gpt4 book ai didi

mysql - 使用 AND OR 进行过滤 - 仅当满足所有条件时才返回

转载 作者:行者123 更新时间:2023-11-29 11:51:44 25 4
gpt4 key购买 nike

我需要根据用户输入(复选框)过滤 MySQL 数据,但我使用的查询未按预期工作。

我使用 3 列(和 3 组复选框)来过滤数据:类型、状态和 bhk(均为整数)。

if ($filter_type != NULL) {
foreach ($filter_type as $type=>$value) {
if ($type === 0) {
$type_cond = "AND t2.type = " . $value;
} else {
$type_cond .= " OR t2.type = " . $value;
}
}
}

if ($stmt = $mysqli->prepare(' SELECT t1.id, t2.*
FROM ' . $table . ' t1
INNER JOIN property t2 ON t2.id = t1.id
WHERE t2.use = ?
' . $type_cond . '
' . $status_cond . '
' . $bhk_cond . '
' . $filter_city . '
' . $filter_zone . '
LIMIT ?, ?'))

其他两个也一样。在表 property 中,我有 1 行:type = 2、status = 0 和 bhk = 3。

我检查复选框 type 1 和 2, bhk 1 (AND type = 1 OR type = 2 AND bhk = 1):什么也不返回,好的。如果我继续检查 bhk 3: 它会返回该行,好的。但如果我还想按状态过滤:

AND t2.type = 1 OR t2.type = 2
AND t2.bhk = 1 or t2.bhk = 3
AND t2.status = 1 OR t2.status = 2

为什么上面这句话会返回行?最后的 AND 和 OR 不成立。我需要的是:仅返回与 3 个 AND/OR 匹配的数据(如果未使用 3 组之一,则返回 2 个)。

我怎样才能做到这一点?

我也有一些疑问:(第一个例子)

AND t2.type = 1 OR t2.type = 2
AND t2.status = 0 --OR t2.status = 1
AND t2.bhk = 1

不返回行...但是如果我添加 OR t2.status = 1 它将返回行...为什么?

(第二个例子)

AND t2.type = 1 OR t2.type = 2
AND t2.status = 1
AND t2.bhk = 3 --OR t2.bhk = 1

这没有任何意义...请赐教。

第二个问题是:为什么 AND does t2.status = 0 不返回该行,而 AND t2.status = 0 OR t2.status = 1 却返回该行? (基于第一个示例)

编辑:添加新脚本(使用 IN() 而不是 OR)

$type_count = count($filter_type);
$type_cond = '';
if ($filter_type != NULL) {
foreach ($filter_type as $type=>$value) {
if ($type === 0) {
$type_cond = 'AND t2.type IN ( ' . $value;
if ($type_count === 1) {
$condition .= ')';
}
} else if ($type < $count) {
$type_cond .= ', ' . $value;
} else {
$type_cond .= ', ' . $value . ')';
}
}
}

最佳答案

您的过滤器:

AND t2.type = 1 OR t2.type = 2
AND t2.bhk = 1 or t2.bhk = 3
AND t2.status = 1 OR t2.status = 2

也可以写成L

AND t2.type = 1 OR (t2.type = 2
AND t2.bhk = 1) or (t2.bhk = 3
AND t2.status = 1) OR t2.status = 2

也就是说,如果t2.status = 2,无论其余部分如何,它都会返回 TRUE。您可以使用适当的括号来修复它,但如果使用 IN

可能会更好
AND t2.type IN (1,2)
AND t2.bhk IN (1,3)
AND t2.status IN (1,2)

关于mysql - 使用 AND OR 进行过滤 - 仅当满足所有条件时才返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com