Ik ben voor eerst bezig met inner join

SELECT * FROM orders
INNER JOIN order_status
ON orders.orderid=order_status.orderid
GROUP BY orders.orderid
ORDER BY orders.orderid DESC

Iedere order heeft meerdere statussen naarmate de ideal transactie wordt voldaan
Ik moet altijd de laatste hebben?

Hoe kan ik dus de order_status.created (timestamp) DESC sorteren?
Zo heb ik het voor elkaar gekregen
SELECT * FROM orders
INNER JOIN order_status AS status
ON orders.orderid=status.orderid
WHERE status.created = (SELECT MAX(created) FROM order_status WHERE orderid = orders.orderid)
ORDER BY status.orderid DESC");
@Sander
Het werkt nu, maar is niet de oplossing. Het id zegt namelijk niets over wanneer iets is toegevoegd. Overigens gaat dit wel 99/100 keer goed, maar het is niet dé manier.

Een timestamp loopt altijd op naarmate de tijd vordert. Dus als een item later is toegevoegd zal de waarde van de timestamp ook altijd hoger zijn.
Je kunt hem dus gewoon sorteren op deze kolom.

Overigens zal je op deze manier maar 1 record terug krijgen, maar dat zou dus zo kunnen:


SELECT 
   *
FROM
   orders
INNER JOIN
   order_status AS status
ON
   orders.orderid = status.orderid
ORDER BY
   status.created DESC
LIMIT 1


Als ik je goed begrijp heb je de Subselect helemaal niet nodig, maar is bovenstaande query een betere oplossing.
@Robert

Bedankt voor je reactie, zoals ik al aangaf eerst inner join voor mij, vind het al heel wat dat het is gelukt.

De query moet middels een while alle records weergeven met de laatste status per bestelling. Maar dat doe die nu dus ik ben tevreden.
@Sander
Ik snap nu ook pas wat je wilt met je query, jou oplossing is opzich een prima idee dan.
Ik had je verkeerd begrepen, waardoor bovenstaande oplossing niet meteen werkt. Je zal hem dan nog moeten groeperen op het order_id. Bovenstaande is dus niet een oplossing voor jou probleem!

Reageren