SQL条件:(A = B和C LIKE%D%)OR(A LIKE%B%和C = D)

时间:2011-01-22 21:04:16

标签: php sql mysql conditional-statements

我有一张名字和姓氏的表。

我正在尝试在输入上进行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 %%条件产生的

之前有人曾经处理过此事并可以帮助我吗?

感谢名单

5 个答案:

答案 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)."%')';