У меня вопрос, на который я не могу найти ответ.
Как я могу предварительно сформировать поисковый запрос только там, где current_version равно 1? Я попробовал запрос ниже, но это не сработало.
SELECT labtest_id AS id,
labtest_name AS name,
labtest_request_code,
labtest_synonym,
labtest_current_version,
labtest_version
FROM labtests
WHERE labtest_current_version = 1 AND labtest_name LIKE %imap% OR labtest_request_code
LIKE %imap% OR labtest_synonym LIKE %imap%
searchkey = test5
-------------------------------------------------------------------
| id | name | request_code | synonym | current_version | version |
-------------------------------------------------------------------
| 1 | test1 | 74532 | one | 1 | 1.00 |
| 2 | test2 | 74432 | two | 1 | 0.00 |
| 3 | test3 | 78962 | three | 0 | 2.05 |
| 4 | test4 | 72111 | four | 0 | 1.07 |
| 5 | test5 | 90322 | five | 1 | 2.00 |
-------------------------------------------------------------------
Таким образом, в этом примере поисковый запрос должен показывать строку 1
-------------------------------------------------------------------
| id | name | request_code | synonym | current_version | version |
-------------------------------------------------------------------
| 5 | test5 | 90322 | five | 1 | 2.00 |
-------------------------------------------------------------------
Вы просто отсутствуете круглые скобки, игнорируя ваши предложения OR
и цитаты вокруг строк:
SELECT labtest_id AS id,
labtest_name AS name,
labtest_request_code,
labtest_synonym,
labtest_current_version,
labtest_version
FROM labtests
WHERE labtest_current_version = 1
AND (labtest_name LIKE '%imap%'
OR labtest_request_code LIKE '%imap%'
OR labtest_synonym LIKE '%imap%')
Если вы опустите круглые скобки, два последних предложения OR
возвратят строки независимо от значения labtest_current_version
из-за приоритета оператора и логических законов.
Вам необходимо сгруппировать свои условия OR, например:
WHERE labtest_current_version = 1 AND (labtest_name LIKE %imap% OR labtest_request_code LIKE %imap% OR labtest_synonym LIKE %imap%)
Необходимо отделить операторы AND/OR путем группировки частей OR с помощью ()
SELECT labtest_id AS id,
labtest_name AS name,
labtest_request_code,
labtest_synonym,
labtest_current_version,
labtest_version
FROM labtests
WHERE labtest_current_version = 1 AND (labtest_name LIKE %imap% OR labtest_request_code LIKE %imap% OR labtest_synonym LIKE %imap%)