Mysql多个LIKE无法正常工作

时间:2011-10-26 23:43:36

标签: mysql sql sql-like autosuggest

我有一张商店餐桌。一些字段是名称,网站,描述等。

我有一个autosuggest搜索栏。我想匹配输入并显示一些相关的商店。现在,它完全匹配用户输入和名称的LIKE语句。

$input = $_GET["q"];
$data = array();
// query your DataBase here looking for a match to $input
include_once "scripts/connect_to_mysql.php";
$query = mysql_query("SELECT name,linklabel,permalink FROM tblMerchants WHERE name LIKE '%$input%'");
while ($row = mysql_fetch_assoc($query)) {
    $json = array();
    $json['name'] = ucwords($row['linklabel']);
    $json['value'] = $row['permalink'];
    $data[] = $json;
}
echo json_encode($data); 

但是,我正在尝试将用户输入与表中的多个字段进行匹配。我正在尝试以下内容并且无法正常工作:

SELECT linklabel,permalink
FROM tblMerchants
WHERE name LIKE '%$input%'
 OR website LIKE '%$input%'
 OR description LIKE '%$input%'

试图解决这个问题。任何意见都表示赞赏!

对不起,应该提到这个。通过不工作我的意思是当使用多个LIKE语句时,它仍然只返回类似'name'的结果

3 个答案:

答案 0 :(得分:4)

like s和and对于彼此不能很好地发挥作用是显而易见的。

使用父母来澄清,例如

SELECT linklabel,permalink 
FROM tblMerchants WHERE 
(name LIKE '%$input%') OR 
(website LIKE '%$input%')  OR 
(description LIKE '%$input%')

否则它可能会尝试猜测并执行

之类的操作
SELECT linklabel,permalink 
FROM tblMerchants WHERE 
name LIKE ('%$input%' OR 
website LIKE '%$input%')  OR 
(description LIKE '%$input%')

我不喜欢;如果以上是它会尝试的实际查询,但基本上它将组合/链接它们的方式可能是'未定义'并且需要解释。

答案 1 :(得分:0)

代码很好(除了SQL注入危险以及它会快速增长的事实)。请显示包含您认为应该返回但在执行此查询时不存在的行的示例数据。

答案 2 :(得分:0)

试试这个:

"SELECT linklabel, permalink FROM tblMerchants WHERE
name like '%$input%'
UNION SELECT linklabel, permalink FROM tblMerchants WHERE
description like '%$input%'
UNION SELECT linklabel, permalink FROM tblMerchants WHERE
website like '%$input%'";

它应该有用。