Probleme avec une requête

Probleme avec une requête - SQL/NoSQL - Programmation

Marsh Posté le 25-10-2004 à 20:53:49    

Bonjours à tous,
 
J'ai un probleme avec une requete(je debute...).  
Je cherche à recuperer divers informations(sur plusieurs tables) pour chacun de mes stages sur une table: "stages".
 
Pour 1 stage il y a plusieurs dates possible(dans une table date "JOURS_SESSIONS2" qui a comme propriété Idjour entre autre) et le probleme de ma requete c'est que ca m'affiche plusieurs ligne pour 1 meme stage, seule la date change(j'ai autant de ligne que de dates possible) et je voudrais regrouper les dates, et n'avoir qu'une seule ligne par stage.
 
Voici ma requete actuelle:
SELECT  `STAGES`.`Libelle`,Precision_session,Publics,Prerequis_Publics,Contenu,
Objectif,Methode,Intervenant,Frais,Financement,`FORMCAT`.`Libelle`,IdEquiv,IdJour  
FROM `STAGES`,`FORMCAT`,`JOURS_SESSIONS2`,`STAGES_SESSIONS`
WHERE `STAGES`.`IdCategorie`=`FORMCAT`.`Id`
AND `STAGES`.`Id`=`STAGES_SESSIONS`.`IdStage`
AND `STAGES_SESSIONS`.`IdSession`=`JOURS_SESSIONS2`.`IdSession`
 
Voilà j'espere que ma question est clair et que quelqu'un pourras m'aider a modifier cette requette afin d'obtenir ce que je souhaite.
Merci d'avance pour votre aide.

Reply

Marsh Posté le 25-10-2004 à 20:53:49   

Reply

Marsh Posté le 25-10-2004 à 21:01:52    

tu utise quoi comme program pour faire ca ?
 
MySql? access ?  


---------------
NEC 3500 | YAMADA 6600 | NIMO_CORP
Reply

Marsh Posté le 25-10-2004 à 21:13:59    

c'est Mysql, via phpmyadmin.

Reply

Marsh Posté le 25-10-2004 à 21:57:29    

Si j'ai bien compris, tu as des doublons (puisque plusieurs dates par stage) et tu veux les virer c'est ça ?
 
Dans ce cas il suffit de rajouter le mot clé "DISTINCT" à côté du SELECT.
Donc SELECT DISTINCT attr1,attr2,...
 
Si j'ai mal compris dis moi ce que tu veux et donne un schéma de ta table :jap:

Reply

Marsh Posté le 26-10-2004 à 02:48:28    

Non c'est pas ca, en fait en executant ma requête j'aimerais avoir autant de ligne que de stage en resultat. Le probleme c'est que ma requête actuelle avec ou sans distincct ca ne change rien, s'il  y plusieurs date qui corresponde à un meme stage j'ai plusieurs ligne avec seule la date qui change.
 
pour 1 shema pourquoi pas, mais connais tu 1 moyen d'en faire 1 automatiquement ? sinon jt'en ferai 1 juste avec les tables concerné.

Reply

Marsh Posté le 26-10-2004 à 08:37:42    

hummm je suis pas sûr d'avoir compris, à première vue je dirais équi-jointure

Reply

Marsh Posté le 26-10-2004 à 13:15:26    

Zoldik a écrit :

Non c'est pas ca, en fait en executant ma requête j'aimerais avoir autant de ligne que de stage en resultat. Le probleme c'est que ma requête actuelle avec ou sans distincct ca ne change rien, s'il  y plusieurs date qui corresponde à un meme stage j'ai plusieurs ligne avec seule la date qui change.
 
pour 1 shema pourquoi pas, mais connais tu 1 moyen d'en faire 1 automatiquement ? sinon jt'en ferai 1 juste avec les tables concerné.


 
Bah si la date change, c'est normal qu'à chaque ligne tu ai une date différente et que le distinct ne fasse pas d'effet (les enregistrements sont différents). Essaye de retirer la date du SELECT et rajoute le mot clé DISTINCT et tu ne seras plus embêté ;)

Reply

Marsh Posté le 27-10-2004 à 01:30:54    

Oui sauf que j'ai plus les dates, mais c'est pas grave j'ai trouver une alternative le probleme est reglé.
Merci.

Reply

Marsh Posté le 27-10-2004 à 10:22:28    

merci d'en faire profiter aux autres, moi ca m'intéresse :)

Reply

Marsh Posté le 28-10-2004 à 22:49:39    

J'ai eu un cas similaire sous PostgreSQL.
 
J'ai utilisé une fonction pl/pgsql qui réalise une concaténation et stocke cette concaténation dans une table distincte (qui serait ici avec les champs stage et date_concat par exemple).
 
La fonction est déclanchée par un Trigger qui écoute quand il y a insertion ou modification dans la table à concaténer.
 
Enfin, je crée une vue qui interroge le champ concaténé plutôt que les champs initiaux.
 
Je ne sais pas si MySQL permet de faire ça maintenant.
 
On doit aussi pouvoir faire ça avec php en plusieurs requêtes.

Reply

Marsh Posté le 28-10-2004 à 22:49:39   

Reply

Marsh Posté le 29-10-2004 à 12:14:16    

Zoldik a écrit :

Oui sauf que j'ai plus les dates, mais c'est pas grave j'ai trouver une alternative le probleme est reglé.
Merci.


Si t'utilises plus les dates, il suffit de shooter la table "JOURS_SESSIONS2" de ta requête...
 
Sinon, mettons que tu voulais savoir combien il y avait de jours pour les stages, un :
 
SELECT  `STAGES`.`Libelle`,Precision_session,Publics,Prerequis_Publics,Contenu,  
Objectif,Methode,Intervenant,Frais,Financement,`FORMCAT`.`Libelle`,IdEquiv,count(IdJour)
...
GROUB BY SELECT  `STAGES`.`Libelle`,Precision_session,Publics,Prerequis_Publics,Contenu,  
Objectif,Methode,Intervenant,Frais,Financement,`FORMCAT`.`Libelle`,IdEquiv
 
Aurait fait l'affaire.
 
Tu pouvais aussi faire un "min(idjour)" pour retrouver le premier jour de la formation, ou "max(idjour)" pour retrouver le dernier...

Reply

Sujets relatifs:

Leave a Replay

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