Результаты MYSQL Limit - PullRequest
       7

Результаты MYSQL Limit

0 голосов
/ 25 августа 2011

Я почти закончил свой запрос, но осталась еще одна проблема, которую нужно решить.Мой запрос выглядит так:

//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. Проблема в том, что вbackend Я могу поместить его в эти состояния много раз, поэтому, если я не буду осторожен при обновлении заказов, он будет добавлять результаты более одного раза.

Можно ли ограничить эту функцию только обработкой последнихобновить (иметь date_add в той же таблице) или ограничить 1?

1 Ответ

0 голосов
/ 25 августа 2011

Попробуйте использовать

 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

Возможно, это поможет.

...