Условие SQL: (A = B И C LIKE% D%) ИЛИ (A LIKE% B% И C = D) - PullRequest
1 голос
/ 23 января 2011

У меня есть таблица имен и фамилий.

Я пытаюсь выполнить мгновенный поиск 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 ]

1 голос
/ 23 января 2011

Если одно из слов будет полным именем полной фамилии, а другое слово является частью другого, почему бы вам сначала не разделить слова? Тогда вы передадите два параметра и получите:

SELECT
    *
FROM
    myTable
WHERE
    (
        firstName = %content1%
        AND lastName LIKE %content2%
    ) OR (
        lastName = %content1%
        AND firstName LIKE %content2%
    )
0 голосов
/ 23 января 2011

Когда два слова введены, это может быть: * полное имя и немного Фамилия * полная фамилия и часть первой

Если это ВСЕ имя (или точное имя) (точное совпадение), то тест = кажется правильным. На всякий случай, если это ошибка в части 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)."%')';
0 голосов
/ 23 января 2011
SELECT * FROM myTable WHERE 
    (firstName = 'content1' AND lastName LIKE content2%) 
OR 
    (lastName = 'content1' AND firstName LIKE content2%)
0 голосов
/ 23 января 2011

Вероятно, это будет работать следующим образом (при условии, что два слова находятся в переменной содержимого):

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%)
0 голосов
/ 23 января 2011

Полагаю, вам нужно разделить два введенных слова и использовать их независимо в своем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...