これらのフィールドを持つ 3 つのテーブルがあります。
product_views
:ProductMasterID, Date
product_clicks
:ProductMasterID, Date
product_master
:ProductMasterID, Category
誰かが私のサイトで製品を表示すると、行が に追加されproduct_views
ます。誰かが私のサイトの製品をクリックすると、行が追加されますproduct_clicks
製品の人気を表示する SQL クエリを (MySQL/PHP で) 書き込もうとしています。人気度は、閲覧数とクリック数の合計です。日付範囲も特定のカテゴリ内で選択できるようにしたいと考えています。
日付/カテゴリの制約なしで機能させることができます。現在、日付範囲を追加しようとしています。これは、先週の人気のために、これまでのところ私が持っているものです:
SELECT *, COUNT(*) AS Popularity FROM
(SELECT product_views.ProductMasterID, product_views.Date
FROM product_views
WHERE product_views.Date BETWEEN '".date('Y-m-d',strtotime('now'))."'
AND '".date('Y-m-d',strtotime('-7days'))."'"."
UNION ALL
SELECT product_clicks.ProductMasterID,product_clicks.Date
FROM product_clicks
WHERE product_clicks.Date BETWEEN '".date('Y-m-d',strtotime('now'))."'
AND '".date('Y-m-d',strtotime('-7days'))."'".") a
GROUP BY ProductMasterID ORDER BY Popularity DESC LIMIT 100"
機能しないことを除いて、結果は得られません。ただし、句のいずれかを削除するとWHERE
、何らかの理由で機能しますが、両方が必要です。だから私の質問は:
WHERE
両方の句で機能させる方法- カテゴリ パートの実行方法。たとえば、「食品」のカテゴリを持つ製品のみを選択します。テーブルのどこかで結合を行う必要があると思います
product_master
が、扱いにくいようです。
どんな助けでも大歓迎です。
ありがとう