gpt4 book ai didi

php - WHERE 子句中的条件检查

转载 作者:行者123 更新时间:2023-11-29 14:01:42 24 4
gpt4 key购买 nike

我正在尝试构建一个查询,这是迄今为止的 WHERE 子句:

WHERE ( s.subject_name LIKE '%$keyword%' OR
c.city_name LIKE '%$keyword%' OR
o.option_name LIKE '%$option%' OR
d.district_id = $districtId OR
c.city_id = $cityId
)

我的实际情况是:

  • $keyword 应始终保存一个值。其他 3 个可能不会。
  • 如果只有 $keyword 有值,则返回的记录应匹配subject_namecity_name 中的 $keyword
  • 如果 $optional 有值,则返回的记录应与 $keyword 匹配并且$选项
  • 如果 $districtId 有值,则结果应与 3 个变量值匹配($keyword$option$区ID)
  • 最后,如果 $cityId 与其他 3 个变量一起具有值,则返回的结果应与所有 4 个变量的值匹配。

这些条件来 self 的搜索页面。 $keyword 是文本框中的值,需要关键字才能开始搜索。这就是为什么我说它总是有值(value)的。其他 3 个值来自选择框,允许在需要时选择项目。

我尝试进行查询,没问题。但我真的对 WHERE 子句感到困惑。到目前为止,上面的代码来 self 的 WHERE 子句。但我无法得到我想要的结果。

最佳答案

如果你想在纯 SQL 中实现这一点,这就是你所需要的(或者至少它应该足够接近):

WHERE (
( s.subject_name LIKE '%$keyword%' OR c.city_name LIKE '%$keyword%' )
AND ('$option' = '' OR (
o.option_name LIKE '%$option%' AND (
'$districtId' = '' OR (
d.district_id = $districtId AND (
'$cityId' = '' OR c.city_id = $cityId
)
)
)
)
)

但是,这还不是最理想的。相反,您应该检查 PHP 中用户输入的内容,并根据此输入运行不同的查询。您还可以动态构建查询:

$query = "SELECT ...";

$query .=
" WHERE ( ( s.subject_name LIKE '%$keyword%' OR c.city_name LIKE %$keyword%' )";
if ( !empty($option) ) {
$query .= " AND o.option_name LIKE '%$option%'";
if ( !empty($districtId) ) {
$query .= " AND d.district_id = $districtId";
if ( !empty($cityId) ) {
$query .= " AND c.city_id = $cityId";
}
}
}
$query .= ')';

关于php - WHERE 子句中的条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14970870/

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