MySQL - Select dernier enregistrement de la deuxième table de correspondance avec la première table
J'ai deux tables clients et commandes, ci-dessous est la structure.
De la Table clients
- id
- customer_name
De la Table commandes
- id
- order_id
- customer_id
table clients ont des disques de clients et de commandes de la table des commandes passées par les clients,
customer_id dans la table commandes est liée à la id champ de la table clients.
Maintenant, un client peut avoir zéro, un ou une ou plusieurs commandes, je veux obtenir les dernières commandes passées par les clients.
lorsque j'exécute la requête suivante un simple invisible rejoindre, il renvoie toutes les commandes du client,
SELECT customers.customer_name,orders.order_id FROM orders,customers WHERE orders.customer_id=customers.id
J'ai aussi essayé de JOINTURE différentes déclarations, mais ne peut pas obtenir la dernière commande par le client, je veux le faire en une seule requête SQL pour tous les clients.
Je vous remercie d'avance pour votre aide.
OriginalL'auteur Alyas | 2013-05-28
Vous devez vous connecter pour publier un commentaire.
Essayer cette requête
Vous n'avez pas de champ de date dans la table de l'ordre, en supposant la dernière commande sera le seul qui a
max(order_id)
.J'ai résolu avec la suivante;
SELECT c.customer_name, o.customer_id, o.order_id,o.id FROM customers c INNER JOIN orders o ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1)
Oui, ne fonctionnera pas si order_id est aléatoire, alors vous devriez avoir le champ date à partir de laquelle nous pouvons obtenir une order_date et de trouver la dernière commande
Très belle solution. Je vous remercie.
cela fonctionne, mais si j'ai un champ date / heure ,et je veux utiliser que les champs?@Meherzad
OriginalL'auteur Meherzad
Dans MySQL il y a juste quelques façons de le faire fonctionner (que j'ai maintenant fait). La première est en quelque sorte votre table comme
desc
avant lajoin
:L'aide en temps réel est la seule façon de le faire, mais si vous avez besoin de faire une jointure sur les pas de temps réel, vous pouvez créer une table temporaire ou un alias de la table de tri à faire de votre sélectionnez, comme ceci:
Alors maintenant, vous êtes en mesure de faire cette jointure de travail:
INNER JOIN orders o ON o.id = (SELECT id FROM orders WHERE customer_id = c.id ORDER BY id DESC LIMIT 1)
Cela m'a aidé beaucoup, merci 😀
OriginalL'auteur vinibarr
Essayer cette requête
OriginalL'auteur Jeeva