我正在尝试构建一个查询,到目前为止这是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
有值,则返回的记录应匹配
$keyword
或subject_name
中的city_name
。 $optional
有值,则返回的记录应与$keyword
匹配
$option
$districtId
有值,则结果应与3个变量值匹配($keyword
,$option
,$districtId
)$cityId
的值与其他3一起,则返回的结果应与所有4个变量匹配。值。 这些条件来自我的搜索页面。 $keyword
是文本框中的值,开始搜索需要关键字。这就是为什么我说它总是有价值的原因。其他3个值来自选择框,允许在需要时选择项目。
我尝试进行查询,没问题。但我真的对WHERE
条款感到困惑。上面的代码来自我的WHERE
子句到目前为止。但我无法得到我想要的结果。
答案 0 :(得分:1)
如果你想在纯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 .= ')';