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) 次に、値EntryIdが 23の結果を除外します

3) 次に、値の値に24 がEntryId含まれる結果を除外します (つまり、24 を含まないAND EntryId NOT LIKE %24%結果を表示しますEntryId) 。

4) 次に、上記の結果から、17 に等しい結果のみを表示し、16 に等しいRecordDay結果も表示します (つまり、17 に等しいまたは16 に等しい結果 (行) を表示します)RecordDayRecordDay = 17 OR RecordDay = 16RecordDayRecordDay

しかし、出力で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)

アドバイスからいくつかの結論を出しました。

結果をフィルタリングして次の結果を表示する場合 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 OR2 つのクエリは同じです。でもの位置()が違う。それで、出力は異なりますか?

OR入力フィールド (フィルター用) にフィルター用の複数の値を書き込む可能性を作成する方が良いクエリが必要な場合は、結論を下しました。たとえば、結果を表示したい場合、月は 4 月、5 月、6 月で、入力フィールドに 04、05、06 と入力します。

私の結論が間違っている場合は修正してください

4

1 に答える 1

2

AND と OR のフラグメントは、両方が使用されている場合は常に括弧で囲む必要があります。また、クエリを読んでいる他の人にとっても、生活が簡単になります。あなたの場合、1組の括弧で十分です:

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 に答える