Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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 Mysql搜索2次,在同一字段上_Php_Mysql_Codeigniter_Search - Fatal编程技术网

Php Mysql搜索2次,在同一字段上

Php Mysql搜索2次,在同一字段上,php,mysql,codeigniter,search,Php,Mysql,Codeigniter,Search,我有一个搜索查询,搜索输入(邮政编码)周围x公里半径内的工厂。它工作正常,但问题是我无法搜索输入(邮政编码),因此当我键入9101时,它不会搜索该邮政编码,只搜索其周围的邮政编码 我的查询如下所示: $string = implode($_SESSION['postcodes'], '|'); if (!isset($_COOKIE['cookie'])) { $query = "SELECT * FROM (`bedrijfcategorieen`)

我有一个搜索查询,搜索输入(邮政编码)周围x公里半径内的工厂。它工作正常,但问题是我无法搜索输入(邮政编码),因此当我键入9101时,它不会搜索该邮政编码,只搜索其周围的邮政编码

我的查询如下所示:

$string = implode($_SESSION['postcodes'], '|');

    if (!isset($_COOKIE['cookie'])) {

        $query = "SELECT * FROM (`bedrijfcategorieen`) 
        JOIN `bedrijven` ON `bedrijfcategorieen`.`idbedrijven` = `bedrijven`.`idbedrijven` 
        JOIN `categorieen` ON `bedrijfcategorieen`.`idcategorieen` = `categorieen`.`idcategorieen` 
        WHERE (`Bedrijfsnaam` LIKE '%".$this->input->post('search')."%' 
        OR `Plaats` LIKE '%".$this->input->post('search')."%' 
        OR `Telefoonnummer` LIKE '%".$this->input->post('search')."%' 
        OR `Email` LIKE '%".$this->input->post('search')."%' 
        OR `Website` LIKE '%".$this->input->post('search')."%' 
        OR `Profiel` LIKE '%".$this->input->post('search')."%' 
        OR `Adres` LIKE '%".$this->input->post('search')."%' 
        OR `Categorie` LIKE '%".$this->input->post('search')."%') 
        AND (Postcode REGEXP '$string')

        GROUP BY `Categorie`,  `bedrijfcategorieen`.`idbedrijven`";
        $query = $this->db->query($query);
        echo '<pre>';
        echo '</pre>';
        $result = $query->result_array();
        return $result;
我希望有点清楚:

你可以看到它在工作

sql输出示例:

从(
bedrijfcategorieen
)上选择*加入
bedrijven
bedrijfcategorieen
idbedrijven
=
bedrijven
idbedrijven
JOIN
categorieen
ON
bedrijfcategorieen
idcategorieen
=
categorieen
idcategorieen
WHERE(
Bedrijfsnaam
如“%design%”或
plaat
类似于“%design%”或
Telefoonnummer
类似于“%design%”或
电子邮件
如“%design%”或
网站
如“%design%”或
Profiel
如 “%design%”或
Adres
类似“%design%”或
Categorie
类似“%design%” 及(邮政编码REGEXP) '9100|9101|9121|9103|9148|9156|9146|9122|9155|9154|9147|9125|9144|9106|9138|9113|9104|9153|') 分组依据
Categorie
bedrijfcategorieen
idbedrijven


好吧,我想我明白你现在的问题了。。您需要将搜索到的邮政编码添加到
$string

 $string = join(',', $postcodes);
.. AND (Postcode IN ($string)) ..
我在数组中的值上添加了一些简单的整数验证,您肯定应该查看数据清理或使用PDO和预处理语句

正如评论中所建议的,在中使用
可能会更好


生成的SQL看起来如何?请参见我的编辑。我直接在codeigniter中使用它,所以不能给你一个更好的例子。我在你的查询中看不到任何聚合函数,那么,
分组依据
的作用是什么?此外,表中还有别名“任何人”?分组依据用于我的结果。当我不使用它时,它会在我的搜索结果中给我一次以上相同的工厂。我还尝试了AND(邮政编码REGEXP'$string')和(邮政编码REGEXP'$string2'),其中string2是我的会话['searched_post_code'],但这不起作用。我会尝试这个。这是有道理的!
$postcodes = (is_array($_SESSION['postcodes']) ? $_SESSION['postcodes'] : array());
$postcodes[] =  $_SESSION['searched_post_code'];
$postcodes = array_filter(filter_var_array($postcodes, FILTER_VALIDATE_INT));
$string = join('|', $postcodes);
 $string = join(',', $postcodes);
.. AND (Postcode IN ($string)) ..