Un ptit coup de pouce pour une requête SQL

Un ptit coup de pouce pour une requête SQL - SQL/NoSQL - Programmation

Marsh Posté le 29-08-2006 à 10:27:52    

Bonjour,
 
Je manipule une BD dans laquelle on stocke dans une table des produits et dans une autre les opérations effectuées sur ces produits. J'ai une table intermédaire Produit_Operation stockant les clés primaires des deux tables.
 
Sur 1 Produit on peut effectuer 0 à n opération, mais 1 opération correspond à 1 ou plusieurs produits (sur plusieurs produits il peut avoir été effectué la même opération). A la table opération est également liée une table lieu_opération qui trace le lieu dans lequel l'opération est effectuée. 1 lieu correspond nécessaire à 0 ou n opérations. Réciproquement, 1 opération est forcément effectuée dans un lieu.
 
Je suis en train de faire la requête pour mon formulaire de recherche...qui marche mais maintenant je dois rechercher le lieu de la dernière opération de chaque produit...et là je sèche pour la requête SQL.
 
Je sais que ma requête doit commencer comme ça:
 

Code :
  1. SELECT Produit_Operation.Id_Produit,Produit_Operation.Id_Operation,Operation.Id_Operation,Operation.Id_Lieu,Lieu_Operation.Id_Lieu,Lieu_Operation.Nom_Lieu FROM Produit_Operation
  2. INNER JOIN Operation
  3. ON Produit_Operation.Id_Operation=Operation.Id_Operation
  4. INNER JOIN Lieu_Operation
  5. ON Lieu_Operation.Id_Lieu=Operation.Id_Lieu


 
Et après, je mets quoi pour ne récupérer que le lieu de la dernière opération de chaque produit? :pfff:  
 
Je sais que ça doit être con, mais...je sèche! :ouch:  
 
Merci de votre aide. :D

Reply

Marsh Posté le 29-08-2006 à 10:27:52   

Reply

Marsh Posté le 29-08-2006 à 10:32:20    

having Operation.Id = MAX(Operation.Id)

Reply

Marsh Posté le 29-08-2006 à 10:44:20    

C'est tout? Et ça va marcher pour chaque produit?

Reply

Marsh Posté le 29-08-2006 à 11:40:24    

orafrance a écrit :

having Operation.Id = MAX(Operation.Id)


 
Ca marche pas parce qu'en fait je fais pas exactment la requête que j'ai commencé plus haut. En fait, dans mon formulaire de recherche, je demande de saisir le nom d'un lieu d'une dernière opération effectuée.
 
Voici donc ma requête avec le HAVING...elle ne marche pas...si quelqu'un pouvait me dire pkoi. Merci d'avance!
 

Code :
  1. SELECT Produit_Operation.Id_Produit,Produit_Operation.Id_Operation,Operation.Id_Operation,Operation.Id_Lieu,Lieu_Operation.Id_Lieu,Lieu_Operation.Nom_Lieu FROM Produit_OperationINNER JOIN OperationON Produit_Operation.Id_Operation=Operation.Id_OperationINNER JOIN Lieu_OperationON Lieu_Operation.Id_Lieu=Operation.Id_Lieu
  2. WHERE Lieu_Operation.Nom_Lieu LIKE '%".$_POST['Lieuactop']."%'"
  3. HAVING Operation.Id_Operation=MAX(Operation.Id_Operation)


 
Bien sûr il s'agit d'une requête encapsulée dans du PHP, d'où le $_POST
 
Merci bcp du coup de main à ceux qui voudront bien m'aider!

Reply

Marsh Posté le 29-08-2006 à 15:57:53    

pour faire un max tu doit faire un group by d'abord
essai un truc du genre avec une sous requete
 
Celle là fonctionne sous ORacle

Code :
  1. SELECT a.Id_Produit,
  2. a.Id_Operation,
  3. b.Id_Operation,
  4. b.Id_Lieu,
  5. c.Id_Lieu,
  6. c.Nom_Lieu
  7. FROM Produit_Operation a
  8. INNER JOIN Operation b
  9. ON a.Id_Operation=b.Id_Operation
  10. INNER JOIN Lieu_Operation c
  11. ON b.Id_Lieu=c.Id_Lieu
  12. where a.Id_Operation  = (select max(d.Id_Operation) from Produit_Operation d
  13. where a.Id_Produit = d.Id_Produit group by d.Id_Produit)


Message édité par dlaumor le 29-08-2006 à 15:59:57
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed