2011-01-22 140 views
1

我有一张名字和姓氏的表。SQL条件:(A = B AND C LIKE%D%)或(A LIKE%B%和C = D)

我想在输入上做一个jQuery即时搜索,以便在一个庞大的人员列表中快速而准确地找到一个人。

当输入第一个单词时,它可能是名字或姓氏。

我这样做:SELECT * FROM myTable WHERE firstName LIKE %content% OR lastName LIKE %content%

当输入两个词,它可能是: *完整的名字,有点姓氏 *完整的姓氏和位firstame的

左右我想这个查询:SELECT * FROM myTable WHERE (firstName = content1 AND lastName LIKE %content2%) OR (lastName = content1 AND firstName LIKE %content2%)

不幸的是括号似乎什么也不做,并且查询不这样理解,我已经得到了很多结果,基本上由两个LIKE %%条件产生

以前有人曾经处理过这件事,可以帮我一把吗?

感谢名单

+1

只是为了澄清 - 在你的第二个查询,内容和百分含量%,实际上是代表不同的字符串,对不对?所以,你没有做firstName ='John Sm'和lastName LIKE'%John Sm%',而是firstname ='John'和lastName LIKE'%Sm%'? – 2011-01-22 21:10:11

+0

您的意思是`SELECT * FROM myTable WHERE(firstName = content1 AND lastName LIKE%content2%)OR(lastName = content2 AND firstName LIKE%content1%)`? – 2011-01-22 21:11:05

+0

是的,我的错误。正上方。我编辑了我的问题 – guillaumepotier 2011-01-22 21:22:21

回答

1

如果其中一个单词将成为完整姓氏的全名,而另一个单词是另一个单词的一部分,为什么不先把单词分开?然后,你会通过两个PARAMATERS和有:

SELECT 
    * 
FROM 
    myTable 
WHERE 
    (
     firstName = %content1% 
     AND lastName LIKE %content2% 
    ) OR (
     lastName = %content1% 
     AND firstName LIKE %content2% 
    ) 
0

我相信你会需要拆分进入两个词,并在查询indepenently使用它们。

0

它可能会以这种方式工作(假设这两个词是在内容变量):

SELECT ... WHERE 
    CONCAT(firstName, " ", lastName) LIKE content% 
    OR CONCAT(lastName, " ", firstName) LIKE content% 

但是这种方法不会非常高效(没有索引使用)。我想这两个词分成两个变量(字词,单词2)并使其类似:

SELECT ... WHERE 
    (firstName = word1 AND lastName LIKE word2%) 
    OR (lastName = word1 AND firstName LIKE word2%) 
0
SELECT * FROM myTable WHERE 
    (firstName = 'content1' AND lastName LIKE content2%) 
OR 
    (lastName = 'content1' AND firstName LIKE content2%) 
0

当输入两个词,它可能 是:*完整的名字,有点的 姓氏*完整的姓氏和 位firstame

如果是ALL(精确匹配)的姓或名,那么=测试似乎是正确的。以防万一它是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)."%')'; 
相关问题