我一直在阅读教程,没有学到什么新东西。我有一桌顾客。客户的名字和姓氏分别存储在不同的列中。我想写一个查询,可以按名字搜索客户,可以是第一个,最后一个,也可以是两个。
这是我得到的:
$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",我可以查询"Lindsay"或"Thompson),然后得到我想要的结果,但如果我查询"lindesay Thompson",我什么都得不到。
我觉得我错过了通配符的要点,或者没有正确使用它们。有人能向我解释一下并更正我的疑问吗。。
感谢
引入通配符来表示"任意数量的任意字符"(在%
的情况下)。
所以
col LIKE '%foo'
将与CCD_ 2值和CCD_。
你想要的实际上是相反的——你需要连接两列,并检查它是否等于请求,比如:
CONCAT(first_name, ' ', last_name) = 'foo bar'
%通配符将与任意数量的字符匹配。使用页面中显示的示例http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html则CCD_ 4将与CCD_。
您遇到的问题是,您在Lindsay
或Thompson
中搜索%Lindsay Thompson
,即在任一名称中搜索任意数量的字符,然后再搜索全名。因此,这将永远不会匹配。
一种选择是在两个名称的链接字符串上运行查询。
从客户中选择*WHERE CONCAT(first_name1,'',last_name1)LIKE'%".mysql_real_aescape_string($_GET['custname'])."%'AND
status
='active'LIMIT 6";
试试这个,希望它能帮助你
$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";