[英]Conditions check in WHERE clause
我正在尝试建立一个查询,到目前为止,这是它的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_name
或city_name
中的$keyword
匹配。 $optional
有一个值,则返回的记录应匹配$keyword
和$option
$districtId
有一个值,则结果应匹配3个变量值( $keyword
, $option
, $districtId
) $cityId
具有一个值以及其他3个值,则返回的结果应匹配所有4个变量的值。 这些条件来自我的搜索页面。 $keyword
是文本框中的值,并且需要关键字才能开始搜索。 这就是为什么我说它总是有价值。 其他3个值来自选择框,该框允许在需要时选择项目。
我试图进行查询,确定。 但是我真的对WHERE
子句感到困惑。 到目前为止,以上代码来自我的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 .= ')';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.