2011-08-25 170 views
0

我已經完成了我的查詢,但仍然有最後一個問題需要解決。我的查詢是這樣的:MYSQL限制結果

//execute the SQL query and return records 
$result = mysql_query("SELECT SUM(ps_order_detail.product_weight) * IF(COUNT(ps_order_detail.id_order_detail) > 50, 1.2, 1) 
as total_provision, COUNT(ps_order_detail.id_order_detail) as antal_ordrar, ps_customer.firstname 
        FROM ps_order_detail 
        JOIN ps_orders ON ps_order_detail.id_order = ps_orders.id_order 
        JOIN ps_order_history ON ps_orders.id_order = ps_order_history.id_order 
        JOIN ps_customer ON ps_orders.id_customer = ps_customer.id_customer 
        WHERE MONTH(ps_order_history.date_add) = MONTH(CURDATE()) AND (ps_order_history.id_order_state) = '4' OR (ps_order_history.id_order_state) = '13' 
        GROUP BY ps_orders.id_customer 
        ORDER BY SUM(ps_order_detail.product_weight) DESC 

"); 


echo "<br>"; 
echo ("<img src=chart.php>"); 
echo "<br>"; 
echo ("<img src=chart_prov.php>"); 

//fetch tha data from the database 
while ($row = mysql_fetch_array($result)) 
{ 
    echo '<font size="3">'; 
    echo " Namn: ".$row{'firstname'}. ""; 
    echo " Provision: ".$row{'total_provision'}. ""; 
    echo " Abonnemang: ".$row{'antal_ordrar'}. ""; 
    echo '<br>'; 
    echo '</font size>'; 
} 

這一部分:

AND (ps_order_history.id_order_state) = '4' OR (ps_order_history.id_order_state) = '13' 

導致的結果,如果訂單的狀態是4或13的問題是,在後臺我可以把要顯示它在這些狀態很多次,所以如果我在更新訂單時不小心,它會多次添加結果。

是否限制該函數只處理最新更新(在同一個表中具有date_add)或限制爲1?

+1

我不明白你在說什麼(更新語句在哪裏?),但是你應該在WHERE子句中檢查括號(也許在OR部分的周圍添加一些)。 – Olaf

回答

0

嘗試使用

SELECT SUM(ps_order_detail.product_weight) * IF(COUNT(ps_order_detail.id_order_detail) > 50, 1.2, 1) 
as total_provision, COUNT(ps_order_detail.id_order_detail) as antal_ordrar, ps_customer.firstname 
       FROM ps_order_detail 
       JOIN ps_orders ON ps_order_detail.id_order = ps_orders.id_order 
       JOIN ps_order_history ON ps_orders.id_order = ps_order_history.id_order     
       JOIN ps_customer ON ps_orders.id_customer = ps_customer.id_customer 
       WHERE ps_order_history.id = (select ps_order_history.id from ps_order_history where ps_orders.id_order = ps_order_history.id_order and MONTH(ps_order_history.date_add) = MONTH(CURDATE()) AND (ps_order_history.id_order_state) = '4' OR (ps_order_history.id_order_state) = '13' order by ps_order_history.date_add desc limit 1) 
       GROUP BY ps_orders.id_customer 
       ORDER BY SUM(ps_order_detail.product_weight) DESC 

也許會有所幫助。

+0

嗯,結果甚至比預期的更高。 – HangerS

+0

該限制按預期工作,但它似乎總計總額和noot curent月 – HangerS

+0

嘗試編輯的版本,但我不知道什麼是在ps_order_history id的名稱。我使用id名稱。 –