我有一个找不到答案的问题。
如何仅在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%)