PHP MYSQL запрос, поиск только в строках, где поле истинно

0

У меня вопрос, на который я не могу найти ответ.

Как я могу предварительно сформировать поисковый запрос только там, где 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    |
-------------------------------------------------------------------
  • 0
    что такое 'labtest_' перед каждым запросом
Теги:
mysqli

3 ответа

3
Лучший ответ

Вы просто отсутствуете круглые скобки, игнорируя ваши предложения 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 из-за приоритета оператора и логических законов.

  • 0
    Спасибо, что сработало! Что 2 знака могут сделать так много изменений?
  • 0
    Смотрите отредактированный ответ.
0

Вам необходимо сгруппировать свои условия OR, например:

WHERE labtest_current_version = 1 AND (labtest_name LIKE %imap% OR labtest_request_code LIKE %imap% OR labtest_synonym LIKE %imap%)
0

Необходимо отделить операторы 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%)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню