Mam 4 tabele.Wartość zamówienia i zamówienia nie jest pobierana poprawnie w mysql
table_orders
order_id
customer_id
order_datetime
order_payment_type
order_delivery_date
delivery_time_slot
table_order_details
order_id
product_id
varient_id
quantity
product_mrp
product_sell_price
product_name
table_order_status
order_id
status_id
status_datetime
table_order_status_values
value_id
value_desc
Chcę uzyskać identyfikator zamówienia, kwotę zamówienia, datę zamówienia, ilość zamówienia, czas zamówienia, wartość_desc.
Używam tego zapytania.
SELECT oo.order_id, oo.amount, oo.date, oo.quantity, oo.time, value_desc
FROM
(
SELECT s.order_id, SUM(OD.product_sell_price * OD.quantity) as amount,
DATE_FORMAT(o.order_datetime, '%d/%m/%Y') as date, SUM(OD.quantity)
as quantity, TIME(o.order_datetime) as time, MAX(status_id) as laststatus
FROM table_orders o
INNER JOIN table_order_details AS OD ON o.order_id = OD.order_id
INNER JOIN table_order_status s ON s.order_id = o.order_id
GROUP BY o.order_id
)oo
INNER JOIN table_order_status_values ON value_id = laststatus
order by order_id DESC
próbki danych:
Table_orders
1 1 2015:12:12:19:42:47 1 2015:12:14 1
table_order_details
1 12 3 1 21.00 20.00 abcd
1 13 2 2 100.00 90.00 efgh
table_order_status
1 1 2015:12:12:19:42:47
1 2 2015:12:12:20:42:47
table_order_status_values
1 NEW ORDER
2 CONFIRM
3 Delivered
Z powyższego wynik zapytania jest:
1 400.00 12:12:2015 6 19:42:47 CONFIRM
Ale spodziewane wyjście jest:
1 200.00 12:12:2015 3 19:42:47 CONFIRM
jestem coraz kwotę zamówienia i porządku wartości ilościowych dwukrotnie (lub trzy) na podstawie numeru statusu dla danego zamówienia.
Jak rozwiązać ten problem? Jakakolwiek pomoc będzie doceniona.
można pokazać przykładowe wyjście? Prawdopodobnie jest to spowodowane przez sprzężenie na 'table_order_status'. Być może potrzebujesz tylko uzyskać najnowszy status, a nie wszystkie wartości pośredniczące: –
@AlexTartan, dostałem twój punkt widzenia. Ale używam MAX (status_id), aby uzyskać ostatni status dla tego zamówienia. –
Chociaż nie jest to poprawne, możesz * użyć * SELECT distinct oo.order_id ... '. Lub spróbuj dołączyć do podsekcji 'table_order_status' już pogrupowanej według order_id, zamiast całej tabeli. Jeśli uda Ci się skonfigurować Fiddle SQL (http://sqlfiddle.com/), mógłbym spojrzeć na –