"SELECT accounts_users.user_ID, users.name_first, users.name_middle, users.name_last, users.company
FROM accounts_users, users
WHERE accounts_users.account_ID = '$account_ID' AND accounts_users.user_ID = users.id AND CONCAT_WS(' ', users.name_first, users.name_middle, users.name_last) LIKE '$user_keyword%'
ORDER BY users.name_first ASC"
所以,如果我在DB中有三个名字:
Aaron J Ban
Aaron J Can
Bob L Lawblaw
如果user_keyword ==“bob lawblaw”,我没有结果。如果user_keyword ==“bob L”则返回Bob L Lawblaw。显然,我不能强迫人们在他们的关键词搜索中包含这些人的中间名,但我仍然坚持正确的方法来做到这一点。
非常感谢所有帮助。
答案 0 :(得分:1)
可能会考虑在这3列上创建一个全文索引,然后对其进行全文搜索。
http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html
<强> ## UPDATE ## 强>
如果使用INNODB,那么可以在字符串上使用php的split
函数;
$myVars = split(" ",$user_keyword);
然后为每个单词添加一个select语句(我也会在select语句中使用concat,所以你不必为每个where语句重新设置它)
$extraSQL = '';
foreach($myVars as $search) {
$extraSQL .= " AND `my_concat` LIKE '%".$search."%'";
}
SELECT
`your_fields`,
CONCAT_WS(' ', users.name_first, users.name_middle, users.name_last) as `my_concat`
FROM `your_tables`
WHERE `accounts_users`.account_ID = '$account_ID' . $extraSQL;