Php 基于条件的Sql查询结果

Php 基于条件的Sql查询结果,php,mysql,Php,Mysql,我在以下函数的sql查询结果中设置了两个条件: 表projects有两列a_name和b_name,我想排除其中b_name的值为xxxxx且a_name和b_name中的值相同的结果 目前使用的方法如下: public function search_project_name($term) { $params = array( ':term' => $term); $sql = "SELECT * FROM projects WHERE project_name like

我在以下函数的sql查询结果中设置了两个条件:

  • 表projects有两列a_name和b_name,我想排除其中b_name的值为xxxxx且a_name和b_name中的值相同的结果
  • 目前使用的方法如下:

    public function search_project_name($term)
    {
        $params = array( ':term' => $term);
        $sql = "SELECT * FROM projects WHERE project_name like '%$term%'ORDER BY projects.create_date DESC $limit";
        $stmt = parent::query($sql, $params);
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
            $result[]=$row;
        endwhile;
        return $result;
    }
    

    您可以使用
    not
    运算符添加这些条件:

    SELECT * 
    FROM   projects 
    WHERE  a_name like '%$term%' AND
           NOT (a_name = 'xxxx' and a_name = b_name)
    

    您可以使用
    not
    运算符添加这些条件:

    SELECT * 
    FROM   projects 
    WHERE  a_name like '%$term%' AND
           NOT (a_name = 'xxxx' and a_name = b_name)
    

    问题部分是查询中的
    $term
    ,因此将
    $term
    替换为
    :term
    尝试更新代码:

    public function search_project_name($term){
      $params = array(
        ':term'=>$term);
      $sql = "SELECT * FROM projects WHERE project_name like '%:term%'ORDER BY projects.create_date DESC $limit";
      $stmt = parent::query($sql, $params);
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
        $result[] = $row;
      endwhile;
      return $result;
    }
    
    还有一个缺少的参数是您在查询中使用但未传递给函数的
    $limit

    $limit
    作为第二个参数默认设置为10行:

    public function search_project_name($term, $limit = 10){
      $params = array(
        ':term'=>$term);
      $sql = "SELECT * FROM projects WHERE project_name like '%:term%'ORDER BY projects.create_date DESC $limit";
      $stmt = parent::query($sql, $params);
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
        $result[] = $row;
      endwhile;
      return $result;
    }
    

    问题部分是查询中的
    $term
    ,因此将
    $term
    替换为
    :term
    尝试更新代码:

    public function search_project_name($term){
      $params = array(
        ':term'=>$term);
      $sql = "SELECT * FROM projects WHERE project_name like '%:term%'ORDER BY projects.create_date DESC $limit";
      $stmt = parent::query($sql, $params);
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
        $result[] = $row;
      endwhile;
      return $result;
    }
    
    还有一个缺少的参数是您在查询中使用但未传递给函数的
    $limit

    $limit
    作为第二个参数默认设置为10行:

    public function search_project_name($term, $limit = 10){
      $params = array(
        ':term'=>$term);
      $sql = "SELECT * FROM projects WHERE project_name like '%:term%'ORDER BY projects.create_date DESC $limit";
      $stmt = parent::query($sql, $params);
      while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
        $result[] = $row;
      endwhile;
      return $result;
    }
    

    需要
    space
    '%$term%
    ORDER
    之间需要
    space
    '%$term%
    ORDER
    之间公共函数搜索项目名称($term){$params=array(':term'=>term);$sql=“SELECT*”来自项目名称类似“%$term%”而非“$term%”的项目(project_name='XXXX'和project_name=builder_name)按项目排序。create_date DESC$limit“$stmt=parent::query($sql,$params);while($row=$stmt->fetch(PDO::fetch_ASSOC)):$result[]=$row;endwhile;return$result;}公共函数搜索_project_name($term){$params=数组(':term'=>$term);$sql=“从按项目排序的项目名称(如“%$term%”和NOT(项目名称='XXXX')和NOT(项目名称=建筑商名称))中选择*。创建日期描述$limit”;$stmt=parent::查询($sql,$params);while($row=$stmt->fetch(PDO::fetch\U ASSOC)):$result[]=$row;ENDWILE;返回$result;}公共函数搜索\U项目名称”($term){$params=array(':term'=>$term);$sql=“从项目名称为“%$term%”和非项目名称为“%$term%”的项目中选择*(项目名称为“XXXX”和项目名称为建筑商名称)按项目排序。创建日期描述$limit”$stmt=parent::查询($sql,$params);而($row=$stmt->fetch(PDO::fetch ASSOC)):$result[]=$row;endwhile;return$result;}公共函数按项目顺序搜索项目名称($term){$params=array(':term'=>$term);$sql=“SELECT*”从项目名称(如“%$term%”和非(项目名称='XXXX')和非(项目名称=生成器名称)的项目中进行。创建日期描述$limit”$stmt=parent::query($sql,$params);while($row=$stmt->fetch(PDO::fetch_ASSOC)):$result[]=$row;endwhile;return$result;}