A voir également:
- Sql regrouper plusieurs lignes en une seule
- Regrouper plusieurs feuilles excel en une seule - Guide
- Comment regrouper plusieurs pdf en un seul - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Partager photos en ligne - Guide
- Mettre une seule page en paysage word mac - Guide
8 réponses
morgbl
Messages postés
2
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
15 novembre 2008
1
15 nov. 2008 à 21:07
15 nov. 2008 à 21:07
Bon j'ai trouvé un truc qui fonctionne mais si vous avez une meilleure idée n'hésitez pas...
Alors voici le principe :
1) Je vais rechercher toutes les dates dans la base avec un DISTINCT pour éviter les doublons
2) Je stocke les dates dans un tableau
3) Avec un foreach($tab as $cle=>$valeur), j'affiche une à une les dates du tableau et pour chacune de ces dates, à l'aide d'une requête, je sélectionne dans la base les lignes correspondant à cette même date.
J'obtiens ainsi :
date 1
- ligne 1
- ligne 2
...
date 2
- ligne 3
- ligne 4
...
Alors voici le principe :
1) Je vais rechercher toutes les dates dans la base avec un DISTINCT pour éviter les doublons
2) Je stocke les dates dans un tableau
3) Avec un foreach($tab as $cle=>$valeur), j'affiche une à une les dates du tableau et pour chacune de ces dates, à l'aide d'une requête, je sélectionne dans la base les lignes correspondant à cette même date.
J'obtiens ainsi :
date 1
- ligne 1
- ligne 2
...
date 2
- ligne 3
- ligne 4
...
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
23 mai 2008 à 11:31
23 mai 2008 à 11:31
Quelle requête sql utilises-tu ?
C'est pour mon taf, je m'occupe d'une petite base de donnée qui stock des infos sur des mesures. La requete sert dans une page permettant d'afficher un planning mensuel, cad afficher toutes les mesures effectuées chaque jour... La requete est un peu longue mais bon... il faut que je mette un GROUP BY qqpart ?
SELECT DISTINCT date AS "DatePlanif", idMesure AS "Mesure", typeOperation AS "Type",
techno AS "Technologie", protocole AS "Protocole", client AS "Client", etat, commentaire
FROM Mesure, Planifie, TypeMesure, Estdetype
WHERE Planifie.Mesure_idMesure = Mesure.idMesure
AND Mesure.idMesure = Estdetype.Mesure_idMesure
AND TypeMesure.idTypeMesure = Estdetype.TypeMesure_idTypeMesure
AND YEAR(Planifie.date) = '.$da.'
AND MONTH(Planifie.date) = '.$noMois.'+1
AND (Mesure.etat = "plan" OR Mesure.etat = "fait")
ORDER BY Planifie.date ASC
SELECT DISTINCT date AS "DatePlanif", idMesure AS "Mesure", typeOperation AS "Type",
techno AS "Technologie", protocole AS "Protocole", client AS "Client", etat, commentaire
FROM Mesure, Planifie, TypeMesure, Estdetype
WHERE Planifie.Mesure_idMesure = Mesure.idMesure
AND Mesure.idMesure = Estdetype.Mesure_idMesure
AND TypeMesure.idTypeMesure = Estdetype.TypeMesure_idTypeMesure
AND YEAR(Planifie.date) = '.$da.'
AND MONTH(Planifie.date) = '.$noMois.'+1
AND (Mesure.etat = "plan" OR Mesure.etat = "fait")
ORDER BY Planifie.date ASC
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
23 mai 2008 à 13:45
23 mai 2008 à 13:45
le GROUP BY est à mettre à la fin et je ne vois pas l'utilité du DISTONCT au début.
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
23 mai 2008 à 13:57
23 mai 2008 à 13:57
Décris les "trucs bizarres" pour que je puisse t'aider.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sans le distinct j'ai des mesures qui apparaissent plusieurs fois le meme jour.... Une meme mesure peut apparaitre sur plusieurs jours d'affilés (et c'est normal), mais une meme mesure plusieurs fois le meme jour ca c'est louche.
Avec un group by je me retrouve avec une seule ligne par jour alors qu'il peut y avoir plusieurs mesure. il m'affiche une seule mesure et "mange" les autres..
Avec un group by je me retrouve avec une seule ligne par jour alors qu'il peut y avoir plusieurs mesure. il m'affiche une seule mesure et "mange" les autres..
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
23 mai 2008 à 14:25
23 mai 2008 à 14:25
Si je comprends bien ton pb, tu dois utiliser une requête comme :
Ni DISTINCT ni GROUP BY.
SI tu as des mesures qui apparaissent plusieurs fois le même jour, ce doit être parceque les jointures de table remontent plusieurs combinaisons.
Suppose deux tables :
- table temp1 : 2 colonnes id et clef. Un seul enregistrement avec id=1 et clef=100
- table temp2 : 2 colonnes clef et lib. Deux enregistrements : 100, 1234 et 100, 4321 (ces deux enregistrements ont la même valeur de clef
La requête select id,temp1.clef,lib from temp1,temp2 where temp1.clef=temp2.clef;
retournera deux enregistrements bien qu'il n'y en ait qu'un dans temp1.
La requête select DISTINCT id,temp1.clef,lib from temp1,temp2 where temp1.clef=temp2.clef;
retournera les deux mêmes enregistrements car leurs valeurs sont bien distinctes (colonne lib)
Par contre la requête select DISTINCT id,temp1.clef from temp1,temp2 where temp1.clef=temp2.clef;
ne retourne qu'un enregistrement car la variable temp2.lib n'est plus retournée et ne distingue donc plus les deux enregistrements.
Il faut que tu comprennes bien ce qui ci-dessus, que tu analyses pourquoi plusieurs enregistrements sont retournés par ta requête et si c'est normal.
Si c'est normal, expose cela clairement et nous verrons ce qu'il est possible de faire.
SELECT date AS "DatePlanif", idMesure AS "Mesure", typeOperation AS "Type", techno AS "Technologie", protocole AS "Protocole", client AS "Client", etat, commentaire FROM Mesure, Planifie, TypeMesure, Estdetype WHERE Planifie.Mesure_idMesure = Mesure.idMesure AND Mesure.idMesure = Estdetype.Mesure_idMesure AND TypeMesure.idTypeMesure = Estdetype.TypeMesure_idTypeMesure AND YEAR(Planifie.date) = '.$da.' AND MONTH(Planifie.date) = '.$noMois.'+1 AND (Mesure.etat = "plan" OR Mesure.etat = "fait") ORDER BY Planifie.date ASC
Ni DISTINCT ni GROUP BY.
SI tu as des mesures qui apparaissent plusieurs fois le même jour, ce doit être parceque les jointures de table remontent plusieurs combinaisons.
Suppose deux tables :
- table temp1 : 2 colonnes id et clef. Un seul enregistrement avec id=1 et clef=100
- table temp2 : 2 colonnes clef et lib. Deux enregistrements : 100, 1234 et 100, 4321 (ces deux enregistrements ont la même valeur de clef
La requête select id,temp1.clef,lib from temp1,temp2 where temp1.clef=temp2.clef;
retournera deux enregistrements bien qu'il n'y en ait qu'un dans temp1.
La requête select DISTINCT id,temp1.clef,lib from temp1,temp2 where temp1.clef=temp2.clef;
retournera les deux mêmes enregistrements car leurs valeurs sont bien distinctes (colonne lib)
Par contre la requête select DISTINCT id,temp1.clef from temp1,temp2 where temp1.clef=temp2.clef;
ne retourne qu'un enregistrement car la variable temp2.lib n'est plus retournée et ne distingue donc plus les deux enregistrements.
Il faut que tu comprennes bien ce qui ci-dessus, que tu analyses pourquoi plusieurs enregistrements sont retournés par ta requête et si c'est normal.
Si c'est normal, expose cela clairement et nous verrons ce qu'il est possible de faire.
morgbl
Messages postés
2
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
15 novembre 2008
1
15 nov. 2008 à 19:40
15 nov. 2008 à 19:40
Bonjour,
J'ai le même problème que Madzorg, je souhaite afficher
date 1
ligne 1
ligne 2
date 2
ligne 4
ligne 5
...
au lieu de :
date 1 - ligne 1
date 1 - ligne 2
date 2 - ligne 3
date 2 - ligne 4
Personne pour aider à résoudre ce problème ?
J'ai le même problème que Madzorg, je souhaite afficher
date 1
ligne 1
ligne 2
date 2
ligne 4
ligne 5
...
au lieu de :
date 1 - ligne 1
date 1 - ligne 2
date 2 - ligne 3
date 2 - ligne 4
Personne pour aider à résoudre ce problème ?
Salut,
Est-ce que tu pourrais donner ton bon de code que tu as utiliser avec la fontion "foreach" ! Parce que je reste blocker sur cette fonction. J'arrive a obtenir la liste des jours avec le foreach mais je n'arrive pas a trouver la suite pour inclure la suite des données et les comparer aux dates pour qu'elles s'affichent par rapports jours.
MERCi
Est-ce que tu pourrais donner ton bon de code que tu as utiliser avec la fontion "foreach" ! Parce que je reste blocker sur cette fonction. J'arrive a obtenir la liste des jours avec le foreach mais je n'arrive pas a trouver la suite pour inclure la suite des données et les comparer aux dates pour qu'elles s'affichent par rapports jours.
MERCi