1
SELECT
billing_line.id,
billing_line.active,
billing_line.account_id,
billing_line.billing_measure_id,
billing_line.site_id,
billing_line.rate,
billing_line.range_start,
billing_line.range_end,
billing_measure.`name` AS measure_name,
billing_service.`name` AS service_name,
billing_field_value.id as billing_field_value_id,
billing_field_value.billing_field_id,
billing_field_value.`value`
FROM
    billing_line,
    billing_service,
    billing_measure
INNER JOIN billing_field_value ON (  ( billing_field_value.BILLING_FIELD_ID = 3 AND billing_field_value.VALUE = 'Option 2')
                                   OR( billing_field_value.BILLING_FIELD_ID = 4 AND billing_field_value.VALUE = 'Option 5'))
WHERE
    billing_line.ACTIVE = 1
AND billing_line.ACCOUNT_ID = 1337
AND billing_line.SITE_ID IS NULL
AND billing_service.ID = 7
AND billing_measure.ID = 15
AND billing_line.BILLING_MEASURE_ID = billing_measure.ID
AND billing_measure.BILLING_SERVICE_ID = billing_service.ID
AND billing_field_value.BILLING_LINE_ID = billing_line.ID
ORDER BY
    billing_service.SORT ASC,
    billing_measure.SORT ASC,
    billing_line.RANGE_START ASC,
    billing_line.RATE ASC

これは、当然ながら、billing_field_value.value が「オプション 2」または「オプション 5」である値を返します。これは、すべての「オプション 2」 (フィールド ID 3 の場合) を選択する必要があるが、「オプション 5」 (フィールド ID 4 の場合) のみを選択する必要があるフィルタリング システム用です。

問題は、返された結果に「オプション 2」->「その他のオプション」と「オプション 2」->「オプション 5」の両方が含まれていることです。そのため、最初のフィルター以降の「フィルター」は効果的に無視されます。

ここで「OR」が問題の一部であることは理解していますが、これらのフィールドと値は同じ列に格納されていても異なる値を持つ可能性があるため、「AND」を使用すると true と評価されないことを意味します。

これはおそらく単純な何かの長い複雑な説明ですが、私は困惑しています. 何かご意見は?

4

0 に答える 0