2011-01-22 187 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)."%')'; 
相關問題