【问题标题】:how to perform a multi sql search via php in one field如何在一个字段中通过 php 执行多 sql 搜索
【发布时间】:2016-12-16 15:35:25
【问题描述】:

我正在使用这个 sql 搜索在我的数据库中查找标题和艺术家。我有一个包含“ref.1570 title artist.mp4”等信息的字段。当我进行搜索时,它可以工作但仅在一个方向上,无论我进行搜索的顺序如何,我都想得到结果......更准确地说,如果我搜索“标题艺术家”没问题,我发现它。如果我没有办法搜索“艺术家标题”......你怎么能帮助我让 php sql 搜索两个方向?

最好的问候,并感谢您的帮助。 菲尔

我正在使用此代码:

 if ($search != null) {
        $sql = 'SELECT * FROM `catalog` WHERE (`file`LIKE "%' . $search . '%")';
        $sqlCount = 'SELECT count(*) FROM `catalog` WHERE (`file`LIKE "%' . $search . '%")';
    }

【问题讨论】:

    标签: php sql select count where-clause


    【解决方案1】:

    你已经解决了我的问题,我现在知道可以正确地将请求分解为变量..

    $search = $name;
      $explode=explode(" ",$search);
    
      print_r (explode(" ",$explode));
    

    然后我像这样使用我的 sql 请求

    $sql = 'SELECT * FROM `catalog` WHERE (`idc` LIKE "%' . $search . '%" OR `file` LIKE "%' . $search . '%" OR `title` LIKE "%' . $explode[0] . '%" AND `artist`LIKE "%' . $explode[1] . '% " OR `artist`LIKE "%' . $explode[0] . '%" AND `title`LIKE "%' . $explode[1] . '%")';
    

    它正在工作!

    【讨论】:

      【解决方案2】:

      您可以尝试这项研究:它对每个单词进行 LIKE %word%。如果您想要更强大的研究,您应该使用弹性搜索等工具...... 这样你就可以做到:

      $parts = explode(" ",$search)
      $queryParts = array();
      
      foreach ($parts as $part) {
         $queryParts[] = `artist`LIKE "%' . $part . '%" ;
      }
      // this way we can have like %artist% AND like %title%
      $querySearch= implode(" AND ", $queryParts); 
      
      $sql = 'SELECT * FROM `catalog` WHERE (". $querySearch .")';
      $sqlCount = 'SELECT count(*) FROM `catalog` WHERE (`". $querySearch .")';
      

      【讨论】:

        【解决方案3】:

        我认为你不会绕过 foreach:

        if ($search != null) {
            $arrayOfSearchTerms = explode(' ', $search);
        
            $sql = 'SELECT * FROM `catalog` WHERE ';
            $sqlCount = 'SELECT count(*) FROM `catalog` WHERE ';
            $termNumber = 0;
        
            foreach ($arrayOfSearchTerms as $term) {
                $addingSql = '';
                if ($termNumber > 0) {
                    $addingSql = ' OR ';
                }
                $addingSql .= '(`file` LIKE "%') . $term . '%")';
                $sql .= $addingSql;
                $sqlCount = $addingSql;
                $termNumber++;
            }
        }
        

        您需要遍历您的搜索词并将这些词添加到您的“LIKE”语句中

        【讨论】:

        • $termNumber 始终为零。
        【解决方案4】:

        为什么不将关键字$searchspace 分开并在查询中附加Like 语句。例如:

        if ($search != null) {
            $keywords=explode(" ",$search);
            $sql = 'SELECT * FROM `catalog` WHERE 1=1'; // just to append OR condition.This won't affect anything as the condition will always be true.
            $sqlCount = 'SELECT count(*) FROM `catalog` WHERE 1=1 ';
            foreach($keywords as $key){
                if(!empty($key)){
                    $sql.=' And file Like \'%'.$key.'\%';
                    $sqlCount.=' And file Like \'%'.$key.'\%';
                }
            } 
        
        }
        

        我相信这会如您所愿。

        【讨论】:

          【解决方案5】:

          使用多查询功能,

          在 mysqli 中应该是:mysqli_multi_query();

          更多信息:Mysqli Multiquery

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-12-02
            • 2013-04-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-15
            • 2013-08-15
            相关资源
            最近更新 更多