как изменить этот конкретный запрос? - PullRequest
2 голосов
/ 19 января 2011
SELECT * FROM foobar
  WHERE userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]'
     OR userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]'
     OR userid != '100' AND col3 REGEXP '[[:<:]]test[[:>:]]' 

Этот запрос работает нормально для меня. Он будет фильтровать в основном по двум критериям

  1. , где col1 или col2 или col3 имеют "test" и
  2. ИД пользователя не равен 100.

У меня есть еще один col4, который мне нужен, кроме above two condition, он должен отфильтровать результаты, где col4 = 'y'

Как мне изменить этот запрос выше?

Ответы [ 5 ]

2 голосов
/ 19 января 2011

У вас есть ошибка в вашем запросе, вам нужно изменить второй col2 на col3.Ошибка будет легче увидеть, если вы переформатируете свой код:

SELECT * FROM foobar
WHERE (userid != '100' AND col1 REGEXP '[[:<:]]test[[:>:]]') OR
      (userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]') OR
      (userid != '100' AND col2 REGEXP '[[:<:]]test[[:>:]]')

Я также добавил скобки, чтобы сделать порядок оценки понятным.Вы можете переписать свой запрос, чтобы избежать повторения выражения userid != '100'.Затем просто добавьте пропущенное предложение:

SELECT * FROM foobar
WHERE userid != '100'
AND col4 <> 'y'
AND (
    col1 REGEXP '[[:<:]]test[[:>:]]' OR
    col2 REGEXP '[[:<:]]test[[:>:]]' OR
    col3 REGEXP '[[:<:]]test[[:>:]]'
)
1 голос
/ 19 января 2011

Как то так? Вы также можете выделить userid != '100', поскольку он является общим для трех проверок.

SELECT * 
FROM foobar 
WHERE userid != '100' 
  AND (col1 REGEXP '[[:<:]]test[[:>:]]' 
       OR col2 REGEXP '[[:<:]]test[[:>:]]' 
       OR col3 REGEXP '[[:<:]]test[[:>:]]' ) 
  AND col4 != 'y'
0 голосов
/ 19 января 2011
SELECT * FROM foobar WHERE 
(userid != '100') AND 
(col1 REGEXP '[[:<:]]test[[:>:]]' OR userid != '100' OR col2 REGEXP '[[:<:]]test[[:>:]]' OR col2 REGEXP '[[:<:]]test[[:>:]]')
AND col4 <> 'y'
0 голосов
/ 19 января 2011

Попробуйте это:

SELECT * 
    FROM foobar 
 WHERE  col4 = 'y'
   OR   (
                userid != '100' 
                 AND (
                                col1 REGEXP '[[:<:]]test[[:>:]]' 
                                OR
                                col2 REGEXP '[[:<:]]test[[:>:]]' 
                                OR 
                                col2 REGEXP '[[:<:]]test[[:>:]]'
                            )
                )
0 голосов
/ 19 января 2011
SELECT * 
    FROM foobar 
    WHERE userid != '100' 
        AND (col1 REGEXP '[[:<:]]test[[:>:]]' 
          OR col2 REGEXP '[[:<:]]test[[:>:]]'
          OR col3 REGEXP '[[:<:]]test[[:>:]]')
        AND col4 <> 'y'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...