【发布时间】:2016-05-23 20:46:48
【问题描述】:
我有一个查询可以很好地用于 twitter typeahead 搜索。它连接了几个字段,以便搜索字符串包含 customer_name、地址、最多 4 个要搜索的电话号码。我目前将客户表的地址部分分为门牌号的 [address] 和街道名称的 [street]。但是,我想实现使用街道表并将街道列替换为 [steeet_id]。我完全无法重组查询以使用 [street_id] 并仍然显示街道名称。下面是运行查询并返回 json 数组的页面。任何帮助将不胜感激。
<?php
if(isset($_POST['query'])) {
//connect to database
include 'connect.php';
//retrieve the query
$query = $_POST['query'];
//search database for all similar items
$sql = mysql_query("SELECT * FROM (
SELECT customer_id, customer_name, address, street, phone_1, phone_2, phone_3, phone_4, CONCAT(customer_name, ' ', address, ' ', street, ' ', phone_1, ' ', phone_2, ' ', phone_3, ' ', phone_4) as `mysearch`
FROM customers) base
WHERE `mysearch` LIKE '%{$query}%'
ORDER BY customer_name ASC, street ASC, address ASC
");
$array = array();
while ($row = mysql_fetch_assoc($sql)) {
$array[] = $row['customer_name'] . " " . $row['address'] . " " . $row['street'] . " " . $row['phone_1']. " " . $row['phone_2']. " " . $row['phone_4']. " " . $row['phone_3']." id#" . $row['customer_id'];
}
//return JSON array
echo json_encode($array);
}
?>
【问题讨论】:
-
我们只是不再使用 PHP 的 mysql_ API。
-
看起来您应该为此使用 MySQL 自然语言搜索。 dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.html
-
顺便说一句,您应该了解
CONCAT_WS(),这样您就不必在连接的所有列之间不断重复空格。
标签: mysql