Php Mysql搜索2次,在同一字段上
我有一个搜索查询,搜索输入(邮政编码)周围x公里半径内的工厂。它工作正常,但问题是我无法搜索输入(邮政编码),因此当我键入9101时,它不会搜索该邮政编码,只搜索其周围的邮政编码 我的查询如下所示: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`)
$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
ONbedrijfcategorieen
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)) ..