2011-05-19 22 views
0

私は1つの行(sales_quantity)のクエリでMySQLのテーブルの3つの異なる方法をフィルタリングしようとしています。過去7日、30日、90日に基づいて同じ行を表示したい。私はこれらのメソッドの1つでクエリ全体をフィルタリングできますが、同じクエリで3つの異なるメソッドをフィルタリングする方法を理解することはできません。前もって感謝します!あなたはこの形式を使用する場合は、同じテーブルに対して3回に参加できフィルタ1 PHPのクエリで複数の方法をmysqlの行を

$sqlCommand = "SELECT 
    titles.id, 
    titles.title, 
    titles.label, 
    titles.street_date, 
    titles.upc, 
    sales.upc, 
    SUM(sales.sales_quantity) AS sum_sales, 
    sales.invoice_date 
FROM 
    titles, 
    sales 
WHERE 
    titles.upc = sales.upc 
    AND titles.label='$user_partner' 
    AND sales.invoice_date > DATE_SUB(CURDATE(), INTERVAL 90 DAY) 
GROUP BY sales.upc 
ORDER BY sum_sales DESC LIMIT 30"; 

$query = mysqli_query($myConnection, $sqlCommand) or die (mysqli_error()); 

$title_list = ''; 
while ($row = mysqli_fetch_array($query)) { 
     $title_id = $row["id"]; 
    $title = $row["title"]; 
    $title_upc = $row["upc"]; 
    $street_date =$row["street_date"]; 
    $sales_upc = $row["upc"]; 
    $sales_quantity_7 = $row["sum_sales"]; 
     $sales_quantity_30 = $row["sum_sales"]; 
     $sales_quantity_90 = $row["sum_sales"]; 

    $title_list .= '<div class="list"><div class="title">'. $title.'</div><div class="upc">'.$title_upc.'</div><div class="date">'.$street_date.'</div><div class="sales">'.$sales_quantity_7.'</div><div class="sales">'.$sales_quantity_30.'</div><div class="sales">'.$sales_quantity_90.'</div></div>'; 
} 
mysqli_free_result($query); 
+0

それぞれの合計に対してサブクエリを「SELECT」で使用します。 – Orbling

答えて

2

は、ここに私のコードです。それぞれsalesテーブルのエイリアスを作成し、それぞれに適切なWHERE句の基準を使用する必要があります。これはうまくいくはずですが、自分自身をテストするデータベースがなければ、確信が持てません。

EDIT:別の列があるので、第4プレーンsalesエイリアスを追加しました。

$sqlCommand = "SELECT 
    titles.id, 
    titles.title, 
    titles.label, 
    titles.street_date, 
    titles.upc, 
    sales.upc, 
    SUM(sales_90.sales_quantity) AS sum_sales_90, 
    SUM(sales_30.sales_quantity) AS sum_sales_30, 
    SUM(sales_7.sales_quantity) AS sum_sales_7, 
    sales.invoice_date 
FROM 
    titles 
    JOIN sales sales ON titles.upc = sales.upc 
    JOIN sales sales_90 ON titles.upc = sales_90.upc 
    JOIN sales sales_30 ON titles.upc = sales_30.upc 
    JOIN sales sales_7 ON titles.upc = sales_7.upc 
WHERE 
    AND titles.label='$user_partner' 
    AND sales_90.invoice_date > DATE_SUB(CURDATE(), INTERVAL 90 DAY) 
    AND sales_30.invoice_date > DATE_SUB(CURDATE(), INTERVAL 30 DAY) 
    AND sales_7.invoice_date > DATE_SUB(CURDATE(), INTERVAL 7 DAY) 
GROUP BY sales.upc, sales_90.upc, sales_30.upc, sales_7.upc 
ORDER BY sum_sales_90 DESC LIMIT 30"; 
関連する問題