1

クエリに少し問題があります。可能な組み合わせのいずれかを選択する必要があります...クエリでデータベースを検索しようとしています

"SELECT * FROM `events` WHERE
                            `start_time` >= '{$current_time}' AND
                            `start_time` >=  '{$limit_from}' AND
                            `end_time` <= '{$limit_to}' AND
                            `filter_large` = '{$filter_large}'"

3つの結果と2番目の結果が得られます

"SELECT * FROM `events` WHERE
                            `start_time` >= '{$current_time}' AND
                            `start_time` >=  '{$limit_from}' AND
                            `end_time` <= '{$limit_to}' AND
                            `filter_education` = '{$filter_education}'"

4つの結果が得られますが、このように両方を一緒にクエリしたいと思います。

"SELECT * FROM `events` WHERE
                          (
                            `start_time` >= '{$current_time}' AND
                            `start_time` >=  '{$limit_from}' AND
                            `end_time` <= '{$limit_to}' AND
                            `filter_education` = '{$filter_education}'
                          ) OR (
                            `start_time` >= '{$current_time}' AND
                            `start_time` >=  '{$limit_from}' AND
                            `end_time` <= '{$limit_to}' AND
                            `filter_large` = '{$filter_large}'
                          )

7つではなく4つの結果しか得られません。何が間違っているのでしょうか。

4

4 に答える 4

3

UNION演算子を使用してみてください:

SELECT * FROM `events` WHERE
(
    `start_time` >= '{$current_time}' AND
    `start_time` >=  '{$limit_from}' AND
    `end_time` <= '{$limit_to}' AND
    `filter_education` = '{$filter_education}'
)

UNION

SELECT * FROM `events` WHERE
(
    `start_time` >= '{$current_time}' AND
    `start_time` >=  '{$limit_from}' AND
    `end_time` <= '{$limit_to}' AND
    `filter_large` = '{$filter_large}'
)
于 2012-04-09T15:17:47.550 に答える
2

3つの結果が得られます

2番目のものは私に4つの結果を与えます

両方を一緒にクエリしたい

7つではなく4つの結果しか得られません

これは、2つのクエリが3つのレコードを共有していることが原因である可能性があります。唯一の違いは最後の条件であるため、他の条件を変更せずに、それらを組み合わせることができます。

SELECT * 
FROM `events` 
WHERE `start_time` >= '{$current_time}' 
AND `start_time` >=  '{$limit_from}' 
AND `end_time` <= '{$limit_to}' 
AND (`filter_large` = '{$filter_large}' OR `filter_education` = '{$filter_education}')
于 2012-04-09T15:19:02.580 に答える
0

UNIONが欲しいと思います:

"SELECT * FROM `events` WHERE
`start_time` >= '{$current_time}' AND
`start_time` >=  '{$limit_from}' AND
`end_time` <= '{$limit_to}' AND
`filter_large` = '{$filter_large}'
UNION
SELECT * FROM `events` WHERE
`start_time` >= '{$current_time}' AND
`start_time` >=  '{$limit_from}' AND
`end_time` <= '{$limit_to}' AND
`filter_education` = '{$filter_education}'"
于 2012-04-09T15:17:51.477 に答える
0

UNIONは、複数のSELECTステートメントの結果を1つの結果セットに結合するために使用されます。

この助けを願っています:D

于 2012-04-09T15:20:34.193 に答える