gpt4 book ai didi

php - Mysql 在同一字段上使用 2 次 AND 进行搜索

转载 作者:行者123 更新时间:2023-11-29 08:31:11 24 4
gpt4 key购买 nike

我有一个搜索查询,用于搜索输入(邮政编码)周围 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;

$_SESSION['postcodes'] 是包含我的邮政编码周围一定半径内的所有邮政编码的 session 。我有另一个名为 searched_post_code 的 session ,该 session 用于输入“9101”。

如何使用填写的邮政编码和我填写的搜索词搜索工厂?

我的搜索表单如下所示:

searchbox

请注意大的“搜索”输入以及半径和邮政编码输入。

我还想将任何搜索词与我搜索的邮政编码相匹配。

表单代码:

<form name="input" method="post" action="searchresults" class="pro6pp_range">
<input type="search" onchange="validate()" placeholder="Zoeken..." name="search" size="70">
<select class="range">
<option value="5" selected="selected">5 km</option>
<option value="10">10 km</option>
<option value="15">15 km</option>
<option value="20">20 km</option>
<option value="25">25 km</option>
</select>
<input type="search" name="searchpc" class="postcode" value="<?= $this->input->cookie('postcode'); ?>" placeholder="Postcode (1234)" maxlength="4">
<input type="submit" value="Zoeken">

我希望它有点清楚:

您可以看到它正在运行 HERE

sql 输出示例:

SELECT * FROM (bedrijfcategorieen) JOIN bedrijven ON bedrijfcategorieen.idbedrijven = bedrijven.idbedrijven JOIN categorieen ON bedrijfcategorieen.idcategorieen = categorieen.idcategorieen WHERE (Bedrijfsnaam LIKE '%design%' OR Plaats LIKE '%design%' OR Telefoonnummer LIKE '%design%' OR Email LIKE '%design%' OR Website LIKE '%design%' OR Profiel LIKE '%design%' OR Adres LIKE '%design%' OR Categorie LIKE '%design%') AND (Postcode REGEXP '9100|9101|9121|9103|9148|9156|9146|9122|9155|9154|9147|9125|9144|9106|9138|9113|9104|9153|') GROUP BY Categorie, bedrijfcategorieen.idbedrijven

最佳答案

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

$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);

我对数组中的值添加了一些简单的整数验证,您绝对应该看看清理数据或使用 PDO 和准备好的语句。

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

 $string = join(',', $postcodes);
.. AND (Postcode IN ($string)) ..

关于php - Mysql 在同一字段上使用 2 次 AND 进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16559361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com