【问题标题】:Mysql multiple LIKE not workingMysql多个LIKE不起作用
【发布时间】:2011-10-26 23:43:35
【问题描述】:

我有一个 stores 表。有些字段是名称、网站、描述等。

我有一个自动建议搜索栏。我想匹配输入并显示一些相关的商店。现在,它可以完美匹配用户输入与名称的 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'的结果

【问题讨论】:

  • 不工作是指出现错误还是没有结果?
  • 提示:我不知道这是您的生产代码还是只是一个示例,但请记住在查询中使用之前清理您的输入。您的代码容易受到 sql 注入的攻击。你可以使用 mysql_real_escape_string()
  • 对不起,应该提到这一点。通过不工作,我的意思是当使用多个 LIKE 语句时,它仍然只返回类似于'name'的结果
  • 当您使用除name 之外的其他字段时,查询实际上是否返回任何内容?我的意思是,例如,仅使用website 之类的。试着澄清it isn't working是什么意思。
  • 好吧,当我将一个单词查询与一个单词字段匹配时,它似乎在工作。但是,一旦我尝试将一个单词查询与多个单词字段(例如描述)进行匹配,它就无法正常工作。此外,当我尝试将两个单词查询与我知道存在的两个单词字段匹配时,它也不会显示任何结果。这些字段的数据库类型可能有问题吗?或者也许是排序规则。它们是 varchar 和 text。排序规则是 latin1_swedish_ci。另外,当我尝试在查询字符串上使用 mysql_real_escape_string() 时,我在搜索中没有得到任何结果?也许我应该尝试全文

标签: mysql sql sql-like autosuggest


【解决方案1】:

likes 和 ands 是臭名昭著的,因为彼此之间的关系不好。

使用括号来说明,例如

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%')

如果上面是它会尝试的实际查询,我不知道,但基本上它组合/链接它们的方式可能是“未定义”并且需要解释。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      试试这个:

      "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%'";
      

      它应该可以工作。

      【讨论】:

        猜你喜欢
        • 2013-07-20
        • 2010-10-04
        • 2022-01-03
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        相关资源
        最近更新 更多