Группировка нескольких запросов MySql - PullRequest
0 голосов
/ 26 июля 2010

У меня есть простой запрос, как указано ниже

SELECT id, name, email FROM users WHERE group_id = 1

Это прекрасно работает до тех пор, пока я не начну добавлять LIKE запросов, прикованных к концу OR операторами.

SELECT id, name, email FROM users 
 WHERE group_id = 1 
   AND id LIKE $searchterm 
    OR name LIKE $searchterm 
    OR email LIKE $searchterm

Внезапно мое предложение WHERE больше не поддерживается, и результаты с 'group_id' 2 или 3 извлекаются.

Есть ли способ, которым я могу сгруппировать WHERE предложения, чтобы они всегда оставались в силе, или я упускаю что-то очевидное?

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Сначала разберитесь с запросом - для правильной интерпретации предложения WHERE необходимо использовать скобки:

SELECT id, name, email 
  FROM users 
 WHERE group_id = 1 
   AND (    id LIKE $searchterm 
       OR name LIKE $searchterm 
       OR email LIKE $searchterm)

Вместо этого я хотел бы использовать полнотекстовый поиск (FTS), чтобы вы моглииспользуйте:

SELECT id, name, email 
  FROM users 
 WHERE group_id = 1 
   AND MATCH(id, name, email) AGAINST ($searchterm)

Помните, что таблица USERS должна быть MyISAM ...

1 голос
/ 26 июля 2010

Я предполагаю, что вы хотите

email FROM users WHERE group_id = 1 AND (id LIKE $searchterm OR name LIKE $searchterm OR email LIKE $searchterm)

Вот приоритет mysql оператора таблица

...