PHP MYSQL 查询,只搜索字段为真的行


PHP MYSQL query, only search in rows where field is true

我有一个找不到答案的问题。

如何仅在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%

搜索键 = 测试5

-------------------------------------------------------------------
| 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%)

需要通过将 OR 部分分组来分隔 AND/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%)