0

特定の時間枠に一致する結果を表示しようとしています-これは正常に機能します。1ただし、表示される結果はparty_typeまたは。のいずれかである必要があるという句を追加したいと思います2

だから私はこれをしました

WHERE start_datetime >= '$DATE_START_SELECTED'
AND end_datetime < '$DATE_END_SELECTED' 
AND PARTY_TYPE='1'
OR PARTY_TYPE='2'
GROUP BY events.ENTRANCE_PRICE

しかし、今は昨日からいくつかの追加のイベントが表示されています...しかし、興味深いのは、それよりも後ろのイベントが表示されていないことです。

4

4 に答える 4

9

これはトリックを行う必要があります

WHERE start_datetime >= '$DATE_START_SELECTED'
AND end_datetime < '$DATE_END_SELECTED' 
AND (PARTY_TYPE='1'
OR PARTY_TYPE='2')
GROUP BY events.ENTRANCE_PRICE

全体の少しきれいなバージョンは

WHERE start_datetime >= '$DATE_START_SELECTED'
AND end_datetime < '$DATE_END_SELECTED' 
AND (PARTY_TYPE IN (1,2))
GROUP BY events.ENTRANCE_PRICE

複数のWHERE条件の使用について詳しくは、こちらをご覧ください。

于 2012-12-19T15:30:58.207 に答える
3

演算子の優先順位で説明されているように、はよりも優先順位ANDが高くなりORます。したがって、現在のフィルターは次のように評価されます。

WHERE (      start_datetime >= '$DATE_START_SELECTED'
         AND   end_datetime <  '$DATE_END_SELECTED' 
         AND PARTY_TYPE='1'
      )   OR PARTY_TYPE='2'

要件に合った優先順位を強制するには、括弧を追加する必要があります。

WHERE       start_datetime >= '$DATE_START_SELECTED'
        AND   end_datetime <  '$DATE_END_SELECTED' 
        AND  (PARTY_TYPE='1' OR PARTY_TYPE='2')

または、代わりに、MySQLのIN()演算子を使用します。

WHERE       start_datetime >= '$DATE_START_SELECTED'
        AND   end_datetime <  '$DATE_END_SELECTED' 
        AND  PARTY_TYPE IN ('1','2')
于 2012-12-19T15:32:42.160 に答える
2

必要に応じてブール値が評価されるようにするには、角かっこを使用する必要があります。特に、一緒にグループ化する

(PARTY_TYPE='1' OR PARTY_TYPE='2')

あなたに与えるために

WHERE start_datetime >= '$DATE_START_SELECTED'
AND end_datetime < '$DATE_END_SELECTED' 
AND (PARTY_TYPE='1' OR PARTY_TYPE='2')
GROUP BY events.ENTRANCE_PRICE
于 2012-12-19T15:32:40.130 に答える
0

クエリでは、ANDとORが機能するレベルにあいまいさがあります。同じレベルに2つの条件を設定します。日付の開始、日付の終了(およびこれらは問題ありません)、およびparty_type(1または0)についてです。代わりに、クエリではそれらを4つの独立したものとして扱います。次のように設定します。

    start_datetime >= '$DATE_START_SELECTED'
    end_datetime < '$DATE_END_SELECTED' 
    AND (PARTY_TYPE='1' OR PARTY_TYPE='2')

お役に立てば幸いです。

于 2012-12-19T16:47:06.777 に答える