2016-06-28 7 views
0


    $listSQL = "SELECT op.name as prodname,count(*) total 
       FROM oc_order_product op 
       INNER JOIN oc_order o ON op.order_id = o.order_id 
       INNER JOIN oc_product_to_category p2c ON op.product_id = p2c.product_id 
       INNER JOIN oc_category_description cd ON cd.category_id = p2c.category_id "; 
    $listSQL = $listSQL."where lower(cd.name) LIKE '%".$category_name."%' 
         AND YEAR(o.date_added) = '".$StartDate."' 
         AND o.order_status_id > '0' "; 
    $listSQL = $listSQL."GROUP BY op.name ORDER BY o.date_added ASC"; 

私はこの名前の製品名を表示しています。フィルタデータ月ごとにMysql

商品名と商品ごとに、その特定の年のその月の月とカウントを表示したいとします。

たとえば、2015年はすべての12か月を表示し、その月の製品の数を表示します。

おかげ Please check this picture to get an idea.

+1

年によって 'グループ(日付フィールド)、月(日付フィールド)'、基本的に、あなたの日付が実際の日付/時刻フィールドとして格納されていると仮定しています。 –

+0

ステートメントについて_「製品名を表示して年に数える」というこのクエリがあります。それはあなたが示したクエリがしているものではありません。それはWHERE句で年ごとにフィルタリングされますが、ORDER BYはグループ化された値ごとに見つかった行から実質的にランダムに 'date_added'を使用します。 – Uueerdo

+0

の日付は「2016-06-28 11:58:01」として保存されます。月ごとにグループ化すると、製品名の月名が表示され、それ自体が繰り返されます。毎月のカウントは取得されません。 –

答えて

0

あなたの元のクエリはかなり近いように見えますが、彼らはその完全なプライマリキーテーブルから来た場合を除きによってグループは通常は良いアイデアではありません「外」非グループ化され、非凝集フィールドを使用して、グループの一部であった。つまり、これはあなたが望むものを与えるはずです。

SELECT op.name AS prodname 
, YEAR(o.date_added) AS oYear 
, MONTH(o.date_added) AS oMonth 
, COUNT(DISTINCT o.order_id) AS numOfOrders 
FROM ... 
GROUP BY prodname, oYear, oMonth 
ORDER BY prodname, oYear, oMonth 
; 

は、[...]あなたの元FROMWHERE

関連する問題