Есть ли способ поиска 2 или более полей одновременно? - PullRequest
2 голосов
/ 27 ноября 2009

Я пытаюсь создать что-то, что делает это:

SELECT *
FROM (`tm_accounts`)
WHERE  CONCAT(`last_name`, `first_name`)  LIKE '%o%'

Это, конечно, не работает. Я просто хочу, чтобы вы увидели идею того, что я пытаюсь подражать.

last_name и first_name - это два отдельных поля в таблице счетов

Ответы [ 2 ]

9 голосов
/ 27 ноября 2009

Я рекомендую использовать:

SELECT a.*
  FROM TM_ACCOUNTS a
 WHERE a.first_name LIKE '%o%'
UNION
SELECT b.*
  FROM TM_ACCOUNTS b
 WHERE b.last_name LIKE '%o%'

OR s печально известны низкой производительностью и рисками обслуживания.

Имейте в виду, что я использую UNION, который удалит дубликаты из окончательного набора результатов. Хотя UNION ALL будет работать лучше, он не удаляет дубликаты, что делает его не идеальным для использования в этом случае.

В случае, если вы не знали, размещение подстановочного знака слева от ваших критериев LIKE не будет использовать индекс. Так что, если у вас был индекс на TM_ACCOUNTS.last_name или TM_ACCOUNTS.first_name (или оба, если используется индекс покрытия).

Это:

WHERE CONCAT(`last_name`, `first_name`)  LIKE '%o%'

... нехорошая привычка - лучше подходить к выполнению этой функции в подселекте или в виде строки. Например:

SELECT x.*
  FROM (SELECT t.*,
               CONCAT(t.last_name, t.first_name) AS full_name
          FROM TM_ACCOUNTS t) x
 WHERE x.full_name LIKE '%o%'
9 голосов
/ 27 ноября 2009
SELECT *
FROM (`tm_accounts`)
WHERE last_name LIKE '%o%' 
   or first_name LIKE '%o%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...