2013-02-23 62 views
1

我一直在阅读教程,并没有学到什么新东西。我有一张顾客的桌子。客户的名字和姓氏存储在单独的列中。我想编写一个查询,可以按名称搜索客户,无论是第一个,最后一个还是BOTH。MySQL LIKE运营商和通配符

下面是我得到了什么:

$queryyy = " 
    SELECT * 
    FROM `customers` 
    WHERE 
     `first_name1` LIKE '".mysql_real_escape_string($_GET['custname'])."%' 
     OR `last_name1` LIKE '%".mysql_real_escape_string($_GET['custname'])."' 
     AND `status` = 'active' 
    LIMIT 6 
"; 

如果我想找到“林赛·汤普森”,我可以查询“林赛”,或为“汤普森”,并得到我想要的结果,但如果我查询“lindsay thompson”,我什么也没得到。

我觉得我错过了通配符,或者没有正确使用它们。是否有人可以解释这对我和我纠正..查询

感谢

+0

你想要的精确匹配?为什么你''%有? – zerkms 2013-02-23 08:07:57

+0

我不一定需要完全匹配,问题是我没有得到任何结果 – 2013-02-23 08:11:04

+1

你设置它的方式,它不会工作。在空格处爆炸字符串,并分别用通配符匹配第一个和最后一个名字(例如'firstname LIKE'lind%'或lastname LIKE'thomp%'') – Supericy 2013-02-23 08:12:13

回答

4

通配符引入表达“任意数目的字符”(在%情况下)。

所以

col LIKE '%foo' 

将匹配foo价值和barfoo价值。

你想要的其实是相反的 - 你需要连接两列,并检查它是否等于要求,如:

CONCAT(first_name, ' ', last_name) = 'foo bar' 
+0

为什么他需要在搜索查询中这么做?这将如何帮助他仅以名字或姓氏搜索客户? – 2013-02-23 08:25:03

+0

@IgorJerosimić:“他为什么要在搜索查询中这么做?” - - 为什么不?这个问题是关于逻辑,而不是优化。 “而这将如何帮助他仅以名字或姓氏搜索客户?” ---我不知道,我只是回答了一个特定的问题(请参阅“如果我想找到”Lindsay Thompson“,我可以查询”lindsay“或”Thompson“并获得我想要的结果,但是如果我查询“lindsay thompson”我什么都没收到。“) – zerkms 2013-02-23 08:27:03

+0

他的请求是”我想写一个查询,可以按姓名搜索客户,无论是第一个,最后一个还是两个。“。 – 2013-02-23 08:27:53

2

一个通配符%将匹配任何数目的字符。若要使用页面http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html D%i%中显示的示例将匹配David

您遇到的问题是,您正在搜索LindsayThompson%Lindsay Thompson,即搜索任意数量的字符后跟全名的任一名称。所以这永远不会匹配。

一种选择是在两个名称的连接字符串上运行查询。

SELECT *从客户WHERE CONCAT(first_name1, '',last_name1)LIKE '% “.mysql_real_escape_string($ _ GET [ 'CUSTNAME'])。” %' AND status = '活性' LIMIT 6" ;

0

试试这个,希望它会帮助你

$queryyy = "SELECT * FROM `customers` 
      WHERE (`first_name1` LIKE '".mysql_real_escape_string($_GET['custname'])."%' 
      OR `last_name1` LIKE '%".mysql_real_escape_string($_GET['custname'])."') 
      or concat(`first_name1`,' ',last_name1`) 
      LIKE'".mysql_real_escape_string($_GET['custname'])."%' 
      AND `status` = 'active' LIMIT 6"; 
+0

有一些错别字,但这无疑帮助我获得了透视。谢谢, – 2013-02-23 09:58:11