Autor Zpráva
Jula
Profil *
Dobrý den,

na SQL jsem nikdy nebyl odborník a ani nebudu, vše co jsem dosud potřeboval jsem vždy udělal, ale momentálně si vážně nevím rady a musím se tedy obrátit na někoho zkušenějšího.

Mám 3 tabulky z prestashopu - ps_order_history(ps_order_state, order_id), ps_customers(name, email, ...), ps_orders(..., customer_id). A potřebuji postupovat následovně.

Z tabulky ps_order_history vyberu 5 posledních objednávek, které mají ps_order_state 14,2,5 nebo 7. To ještě zvládnu, ale potom už neumím k tomu přiřadit určitou objednávku a informace uživatele.

Mohl by mi někdo prosím poradit?
Alphard
Profil
select ... from ps_order history h
 left join ps_orders o on o.id = h.order_id
 left join ps_customers c on o.customer_id = c.id
Takhle? Doufám, že všechny tabulky mají id.
Tori
Profil
Anebo tohle?
select ... from
(select poslednich 5 objednavek z ps_order_history) h
left join ps_orders ... -- dál jako [#2]
Jula
Profil *
Skvělý hoši, moc děkuji, poskládal jsem to následovně -

select orders.id_customer, h.id_order, h.id_order_state, customers.email from
(select id_order, id_order_state from ps_order_history ORDER BY id_order DESC LIMIT 5) h
left join ps_orders orders on orders.id_order = h.id_order
left join ps_customer customers on customers.id_customer = orders.id_customer

Ještě se zeptám, jak zamezím duplikacím z ps_order_history, je tam přesný postup dané objednávky a stává se, že za sebou jsou třeba 3 stavy, potřebuji jen ten poslední. Distinct nefunguje a group by s order by dohromady nejde.
Tori
Profil
Asi bych zkusila pro začátek něco takového a pak to pomocí EXPLAIN ladila: (nejsem jista, jestli to bude fungovat, nezkoušela jsem to)
select orders.id_customer, h.id_order, h.id_order_state, customers.email from
(select id_order, id_order_state from ps_order_history 
    inner join 
        (select id_order, max(date_add) as date_add from ps_order_history
         group by id_order ORDER BY id_order DESC LIMIT 5
        ) h2 using(id_order, date_add)
) h
left join ps_orders orders on orders.id_order = h.id_order
left join ps_customer customers on customers.id_customer = orders.id_customer
Jula
Profil *
Tori:
Funguje to bezvadně, moc děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: