开发者

MYSQL Limit results

开发者 https://www.devze.com 2023-03-30 08:47 出处:网络
I\'ve almost done with my query, but there is still one last issue to resolve. My query looks like this:

I've almost done with my query, but there is still one last issue to resolve. My query looks like this:

//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{'to开发者_运维技巧tal_provision'}. "";
   echo " Abonnemang: ".$row{'antal_ordrar'}. "";
   echo '<br>';
   echo '</font size>';
}

This part:

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

causes the result to be displayed if the state of orders is either 4 or 13. The problem is that in the backend I can put it in those states many times, so if I'm not careful when updating orders, it will add the results more than one time.

Is it a way to limit that funktion to just handle latest update (have date_add in same table) or limit by 1?


Try to use

 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

Maybe it helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消