これは私をかなり混乱させ、多数のフォーラムと「ハウツー」サイトを読んだ後、なぜこれが機能しないのかさらに混乱していると思います.
参加している2つのテーブルがあります。
表 1 (製品) には、すべての製品の詳細が含まれています。
表 2 (評価) には、各製品のすべての評価が含まれており、各製品には 3 つの異なる評価エンティティからの 3 つの評価があります。
私は一連の AJAX 検索フィルターに取り組んでおり、すべてのフィルターを組み込んだ方法でクエリを記述する必要があります。
フィルターには、価格、レビュー数、平均レビュー星、評価 1、評価 2、評価 3 が含まれます。
価格、レビュー数、平均星は、表 1 (製品) から取得されます。
評価 1、2、および 3 は、表 2 (評価) から取得されます。
クエリにはこのようなものが必要ですが、クエリしている基準を満たすレコードがあることがわかっている (データベースで確認した) 場合、これはゼロの結果を返します。
SELECT p.id, p.name
FROM products p
JOIN ratings r ON p.id = r.id
WHERE p.num_reviews BETWEEN '0' AND '1000'
AND p.price BETWEEN '0' AND '500'
AND p.avg_rvw_stars BETWEEN '0' AND '5'
AND (r.ratingSource='1' AND (r.rating BETWEEN '1' AND '4'))
AND (r.ratingSource='2' AND (r.rating BETWEEN '0' AND '100'))
AND (r.ratingSource='3' AND (r.rating BETWEEN '0' AND '100'))
ORDER BY p.name ASC
問題は、最後の 3 つの WHERE ステートメントにあるようです。3つのうち2つを削除すると、結果が得られます。しかし、3 つすべてを含めると、適格なレコードがある場合は何も得られません。
最後の 2 つの AND を OR に変更すると、結果も得られますが、期待または必要な結果セットではありません。
私はこれを正しく書いていませんか?
どんな助け/指導も大歓迎です!!