Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/04/2011, 15h46   #1
Invité de passage
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 1
Points : 1
Par défaut Requête de tri

Bonjour,
Après avoir planché un bon bout de temps sur ce problème je demande un coup de main histoire de mettre les choses au clair.

Existant :
1 table :
taches (id_taches, ..., temps_restant, id_projet)
Code :
1
2
3
4
5
6
7
 
id_taches   temps_restant   id_projet
1                 -1000             2
2                 -500               4
3                  0                  2
4                  -300              6
5                  100               4
Résultat souhaité :
Trier du plus urgent et par projet, donc :
Code :
1
2
3
4
5
6
7
 
id_taches   temps_restant   id_projet
1                 -1000             2
3                  0                  2
2                 -500               4
5                  100               4
4                  -300              6
Voila, le problème c'est que malgré cette requête :
Code :
1
2
3
4
 
SELECT *  FROM taches ORDER BY  temps_restant, id_projet ASC
ou
SELECT *  FROM taches ORDER BY id_projet,temps_restant ASC
Enfin vous pensez bien que j'ai retourné la requête sous toutes ses formes, maintenant le problème à l'air plus complexe que ça j'ai donc essayer de faire :

Code :
1
2
3
4
5
 
SELECT *  FROM taches ORDER BY  temps_restant ASC
puis 
SELECT * FROM taches WHERE id_projet = '$id' 
(=> avec $id, l'id de la requete précédente dans une boucle while)
Ces deux requêtes avec des parcours c'est bien, sauf que j'ai un système de page suivante, précédente et la c'est hyper fouillis.

Dans tous les cas je suppose qu'il existe une manière de faire en sorte qu'une seule requête retourne le résultat souhaité mais par quel procédé, select imbriqué peut être...

Merci de votre compréhension,
badichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 16h18   #2
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Code mysql :
SELECT *  FROM taches ORDER BY  temps_restant ASC, id_projet ASC

Essaye ceci, chez moi ça marche .
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 16h36   #3
Invité de passage
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 1
Points : 1
Merci de ta réponse,

la requête que tu me proposes je l'avais déjà testé et je confirme donc que ce n'est le résultat souhaité ce qui me parait logique puisqu'en somme temps_restant est unique du coup il n'y a en faite aucune valeur vraiment regroupé mais toute indépendant je pense que le problème est la. Actuellement il les tri vulgairement par temps_restant.

Reste a savoir par quel moyen contourné ça ...
badichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 16h49   #4
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Hum, j'ai juste inversé :

Code mysql :
SELECT *  FROM test ORDER BY  id_projet ASC, temps_restant ASC

Et la ça devrait marcher ou alors je comprends pas ce que tu cherche :

J'ai une table comme ceci

Code :
1
2
3
4
5
6
7
8
9
 
id_taches 	temps_restant 	id_projet
	1 	     -500 	       2
	2 	     -200 	       4
	3 	      100 	       2
	4 	     -500 	       2
	5 	        0 	       1
	6 	     -100 	       3
	7 	     -200 	       1
Suite à la requête, j'obtiens ceci :
Code :
1
2
3
4
5
6
7
8
9
 
id_taches 	temps_restant 	id_projet
	7 	       -200 	        1
	5 	         0 	        1
	1 	       -500 	        2
	4 	       -500 	        2
	3 	        100 	        2
 	6 	       -100 	        3
	2 	       -200 	        4
C'est donc classé par "id_projet" puis par "temps-restant"
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 16h57   #5
Invité de passage
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 1
Points : 1
En effet cette requête marcherais dans un autre contexte, le problème est et excuse si je me suis mal exprimé c'est que je veux trier en premier lieu les projet les plus urgent grâce a temps_restant PUIS a la suite les différents projet à la suite toujours par ordre d'urgence (sachant que le plus urgent est le plus petit nombre)
Ta table doit ressemblé à cela au final :

Code :
1
2
3
4
5
6
7
8
9
10
 
 
id_taches 	temps_restant 	id_projet
	1 	       -500 	        2
	4 	       -500 	        2
	3 	        100 	        2
	2 	       -200 	        4
	7 	       -200 	        1
	5 	         0 	        1
 	6 	       -100 	        3
Voila donc j'espère que tu vois la différence et la tout ce complique en tout cas je fais un blocage :s ...
badichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 17h00   #6
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
Ok je vois, en effet c'est bien plus compliqué que ce que je pensais. Je vais essayer de regarder ça .
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 17h05   #7
Invité de passage
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 1
Points : 1
Ok, c'est sympa de ta part.

J'avais presque pensé à une procédure stockée mais ça fait quelques temps que j'en ai pas fait donc serait-ce vraiment utile ...
badichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 17h07   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
En déterminant les temps urgents ça doit être correctement trié :
Code :
1
2
3
4
5
6
7
SELECT t.id_taches, t.temps_restant, t.id_projet
  FROM taches t
  JOIN (SELECT id_projet, min(temps_restant) AS urgent
          FROM taches 
         GROUP BY id_projet
        ) u ON t.id_projet = u.id_projet
 ORDER BY  u.urgent, t.id_projet, t.temps_restant
J'ai mis ORDER BY u.urgent, t.id_projet, t.temps_restant dans cette ordre pour que les résultats ne soient mélangés entre projet dans le cas où 2 projets ont la même urgence.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/04/2011, 17h14   #9
Membre éprouvé
 
Avatar de Nheo_
 
Homme
Étudiant
Inscription : avril 2011
Messages : 317
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2011
Messages : 317
Points : 405
Points : 405
En effet ça marche . Reste plus qu'à mettre résolu badichou .
Nheo_ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/04/2011, 17h19   #10
Invité de passage
 
Homme
Développeur Web
Inscription : avril 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : Service public

Informations forums :
Inscription : avril 2011
Messages : 5
Points : 1
Points : 1
Bon ba c'est parfait, merci à tous.

Cela dit faut que je me remette profondément au sql, fallait y pensé
badichou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h37.


 
 
 
 
Partenaires

Hébergement Web