我试图找出我的查询需要的方式和功能,仍然不确定使用Like,concat或什么部分等。
我的情况就是这样
1。)我有多个栏目(国家,城市,州,地点) 2.)只有1个搜索输入 3.)搜索输入可以是1个单词,或者多个单词也可以忽略间距(例如,#34;中心城市或中心城市或费城中心城市等)
它将返回与不同列中的单词匹配的行。
以下是我的尝试,但此刻并没有返回任何内容。谢谢你的时间
腓:
<?php
ini_set('display_errors', 1); error_reporting(E_ALL);
include 'connect.php';
if($_POST)
{
$searchaddress = ($_POST['searchaddress']);
$result=mysqli_query($con,"SELECT *
FROM Listing WHERE CONCAT(country,state,city,Location) LIKE '%$searchaddress%' AND Status='Open'") or die( mysqli_error($con));
$output = array();
// fetch your results
while( $row = mysqli_fetch_assoc($result) )
{
// add result row to your output's next index
$output[] = $row;
}
// echo the json encoded object
echo json_encode( $output );
}
?>
答案 0 :(得分:2)
在不知道您的确切数据以及$searchaddress
是什么的情况下,很难说它失败的原因。
您正在谈论加入空格,但只传入一个搜索标签 - 表达式LIKE '%something something else%'
不会忽略空格。
如果您希望所有给定单词匹配的结果数量最少,则应该付出更多努力并使用or/and
searchtags / columns组合。您可以通过编程方式执行此操作。
假设您输入了2个关键字:Center Detroid
,您基本上想要生成搜索查询:
FROM Listing WHERE
(
country LIKE '%Center%' OR
state LIKE '%Center%' OR
city LIKE '%Center%' OR
Location LIKE '%Center%'
)
AND
(
country LIKE '%Detroid%' OR
state LIKE '%Detroid%' OR
city LIKE '%Detroid%' OR
Location LIKE '%Detroid%'
)
要实现这一目标,您需要了解两件事:
然后,以下代码段将根据需要生成where部分:
$search = "Detroid City Center";
$keywords = explode (" ", $search);
$columns = array("country", "state", "city", "location");
$andParts = array();
foreach ($keywords AS $keyword){
$orParts = array();
foreach($columns AS $column){
$orParts[] = $column . " LIKE '%" . mysql_real_escape_string($keyword) . "%'";
}
$andParts[]= "(" . implode($orParts, " OR ") . ")";
}
$and = implode ($andParts, " AND ");
echo $and;
数组中给出的示例将产生
(
country LIKE '%Center%' OR
state LIKE '%Center%' OR
city LIKE '%Center%' OR
location LIKE '%Center%'
)
AND
(
country LIKE '%City%' OR
state LIKE '%City%' OR
city LIKE '%City%' OR
location LIKE '%City%'
)
AND
(
country LIKE '%Detroid%' OR
state LIKE '%Detroid%' OR
city LIKE '%Detroid%' OR
location LIKE '%Detroid%'
)
这将匹配任何行,其中中心,城市或 Detroid 在其中一个(搜索)字段中至少出现一次每行。
答案 1 :(得分:0)
更新了搜索地址字段中每个单词的答案:
$searchaddress = "some address to find";
$address_parts = explode(" ", trim($searchaddress));
$sql_parts = array();
foreach($address_parts as $part) {
$sql_parts[] = 'full_address LIKE "%'.$part.'%"';
}
$query = 'SELECT *, CONCAT(country,state,city,Location) AS full_address FROM Listing WHERE `Status` = "Open" HAVING '.implode(' OR ', $sql_parts);