我有一张名字和姓氏的表。
我正在尝试在输入上进行jQuery即时搜索,以便在一大群人中非常快速准确地找到一个人。
当在输入中输入第一个单词时,它可能是名字或姓氏。
我这样做:SELECT * FROM myTable WHERE firstName LIKE %content% OR lastName LIKE %content%
输入两个单词时,可能是: *完整的名字和一些姓氏 *完整的姓氏和一点点的第一次
所以我尝试了这个查询:SELECT * FROM myTable WHERE (firstName = content1 AND lastName LIKE %content2%) OR ( lastName = content1 AND firstName LIKE %content2%)
不幸的是,括号似乎什么都不做,而且查询不是这样解释的,我得到了很多结果,基本上是由两个LIKE %%条件产生的
之前有人曾经处理过此事并可以帮助我吗?
感谢名单
答案 0 :(得分:1)
如果其中一个单词将是完整姓氏的完整名字,而另一个单词是另一个单词的一部分,为什么不首先拆分单词呢?然后你将传递两个参数并且有:
SELECT
*
FROM
myTable
WHERE
(
firstName = %content1%
AND lastName LIKE %content2%
) OR (
lastName = %content1%
AND firstName LIKE %content2%
)
答案 1 :(得分:0)
我相信您需要拆分输入的两个单词,并在查询中独立使用它们。
答案 2 :(得分:0)
这可能会这样(假设两个单词在内容变量中):
SELECT ... WHERE
CONCAT(firstName, " ", lastName) LIKE content%
OR CONCAT(lastName, " ", firstName) LIKE content%
但是这种方法效率不高(没有索引使用)。我会将这两个单词分成两个变量(word1,word2),并使其类似于:
SELECT ... WHERE
(firstName = word1 AND lastName LIKE word2%)
OR (lastName = word1 AND firstName LIKE word2%)
答案 3 :(得分:0)
SELECT * FROM myTable WHERE
(firstName = 'content1' AND lastName LIKE content2%)
OR
(lastName = 'content1' AND firstName LIKE content2%)
答案 4 :(得分:0)
输入两个单词时,可能会 是:*完整的名字和一点点 姓氏*完整的姓氏和 第一点
如果它是(完全匹配)的全名或姓氏,那么= test似乎是正确的。如果它是PHP部分中的错误,它应该是这样的。
$qry = '
SELECT * FROM myTable
WHERE (firstName = content1 AND lastName LIKE '%".mysql_real_escape_string(content2)."%')
OR ( lastName = content1 AND firstName LIKE '%".mysql_real_escape_string(content2)."%')';
如果两者都有,那么你需要两次通配符
$qry = '
SELECT * FROM myTable
WHERE (firstName LIKE '%".mysql_real_escape_string(content1)."%' AND lastName LIKE '%".mysql_real_escape_string(content2)."%')
OR ( lastName LIKE '%".mysql_real_escape_string(content1)."%' AND firstName LIKE '%".mysql_real_escape_string(content2)."%')';