0

目的是了解如何AND OR从多列中过滤数据。

这是查询示例

SELECT * FROM 2_1_journal WHERE 
EntryId > 10 
AND EntryId != 23
AND EntryId NOT LIKE %24%
AND 
RecordDay = 17 OR RecordDay = 16

有了这个查询,我想要

1)首先选择值EntryId大于10的所有结果

2) 然后排除值为EntryId23的结果

3)然后排除其中 value 值EntryId包含 24 的结果(AND EntryId NOT LIKE %24%我的意思是:显示结果,其中EntryId不包含 24)

4)然后从上面的结果中只显示RecordDay等于 17 的结果,也显示RecordDay等于 16 的RecordDay = 17 OR RecordDay = 16结果(我的意思是:显示结果(行)RecordDay等于 17 或RecordDay等于 16)

但在输出中看到结果EntryId是 24(与 相反EntryId NOT LIKE %24%)。

我需要AND OR对每个 MySQL 列进行分组吗?

就像是:

SELECT * FROM 2_1_journal WHERE 
(EntryId > 10 
AND EntryId != 23
AND EntryId NOT LIKE %24%)
AND 
(RecordDay = 17 OR RecordDay = 16)

从advises得出了一些结论。

如果要过滤结果以查看以下结果 DD/MM: 01/04, 01/03, 06/04, 06/03 代码是否正确?

(RecordDay = 01 OR RecordDay = 06)
AND (RecordMonth = 04 OR RecordMonth = 03)

考虑一些可能性并得出结论,最好不要使用OR。因为我不知道用户想要哪个订单。

$query = "SELECT * FROM 2_1_journal 
WHERE 
(EntryId LIKE '%10%' OR EntryId LIKE '%23%') 
AND
EntryId NOT LIKE '%4%'
AND 
(RecordDay = 17 OR RecordDay = 16") ;

//EntryId包含10和23,但不包含4且RecordDay为17或16(例如EntryId/RecordDay 100/17, 231/17, 1023/16

$query = "SELECT * FROM 2_1_journal 
WHERE EntryId LIKE '%10%' 
OR 
(EntryId LIKE '%23%' AND EntryId NOT LIKE '%4%')
AND
(RecordDay = 17 OR RecordDay = 16") ;

//EntryId/RecordDay 104/17 因为包含 10 OR(包含 23 不包含 4)104/17 包含 10 并且没有要求它不能包含 4

AND OR在两个查询中是相同的。但位置()不同。所以输出会不同吗?

现在得出结论,如果希望查询OR更好地在输入字段(用于过滤器)中创建为过滤器写入多个值的可能性。例如,如果我想查看结果,其中月份是 4 月、5 月、6 月,在输入字段中写入 04、05、06。

如果我的结论有误,请纠正我

4

1 回答 1

2

绝对地,当 AND 和 OR 片段都被使用时,应该始终用括号括起来,否则结果很容易成为您不期望的结果。它还将使其他阅读您的查询的人的生活变得更简单。在您的情况下,一组括号就足够了:

SELECT * FROM 2_1_journal 
WHERE EntryId > 10 
  AND EntryId != 23
  AND EntryId NOT LIKE '%24%'
  AND (RecordDay = 17 OR RecordDay = 16)

为了可读性,通常独立包装每个片段:

SELECT * FROM 2_1_journal 
WHERE (EntryId > 10)
  AND (EntryId != 23)
  AND (EntryId NOT LIKE '%24%')
  AND (RecordDay = 17 OR RecordDay = 16)
于 2013-06-24T16:44:27.363 回答