Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条件签入WHERE子句_Php_Mysql_Where Clause - Fatal编程技术网

Php 条件签入WHERE子句

Php 条件签入WHERE子句,php,mysql,where-clause,Php,Mysql,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 ) 我的实际情况是: $keyw

我正在尝试构建一个查询,到目前为止,这是它的
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\u name
    city\u name
    中的
    $keyword
  • 如果
    $optional
    有值,则返回的记录应与
    $keyword
    匹配,并且
    $option
  • 如果
    $districtId
    有一个值,则结果应与3个变量值匹配(
    $keyword
    $option
    $districtId
  • 最后,如果
    $cityId
    和其他3个变量一起有一个值,则返回的结果应该匹配所有4个变量的值
这些条件来自我的搜索页面
$keyword
是文本框中的值,需要关键字才能开始搜索。这就是为什么我说它总是有价值的。其他3个值来自选择框,允许在需要时选择项目


我试着提出这个问题,没问题。但是我真的把
WHERE
子句弄糊涂了。以上代码来自迄今为止我的
WHERE
子句。但是我不能得到我想要的结果

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

然而,这远远不是最优的。相反,您应该在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 .= ')';

期望的结果是什么,你得到了什么?如果五个结果中至少有一个需要,输出就会出现match@PreetSangha我在发布这篇文章之前已经检查了这个链接。但我不能把它应用到这件事上。
$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 .= ')';