2010-09-26 4 views
0

J'ai une base de données MySQL avec un ou plusieurs champs relationnels (par exemple orders et order_items) Chaque fois qu'un order_item est modifié, l'enregistrement est également inséré dans la table order_item_history avec l'horodatage dans le champ modifié.MySQL - Obtenir des "instantanés" historiques à partir d'une table d'historique

Ce que je dois faire est d'interroger la base de données pour obtenir l'état de la commande en fonction d'une date particulière. Pour obtenir la version la plus récente pour un order_item particulier, je

SELECT * de order_item_history où order_item_id = 4 et modifié < = 'RECHERCHE DATE' ORDER par limite DESC modifiée 1

Qu'est-ce que je ne peux pas comprendre comment écrire une requête qui fonctionnerait comme celle ci-dessus, sauf renvoyer les versions les plus récentes de tous les éléments attachés à une commande basée sur le champ order_id

Je peux le faire par programmation en PHP en plaçant le paramètre order_item_ids dans un tableau et l'exécution d'une requête pour chacun d'eux, mais je dois penser qu'il existe un moyen de le faire à partir de MySQL.

Toute aide serait grandement appréciée.

Répondre

0

Essayez -

SELECT * FROM order_item o 
LEFT JOIN order_item_history oh ON o.id=oh.item_id 
WHERE o.id=4 
ORDER BY o.id DESC 
LIMIT 1 
+0

Merci pour votre réponse rapide, mais cette requête ne renvoie qu'une seule ligne, je tiens à le limiter un pour chaque élément de commande –

Questions connexes