Repartir les données de la table SQL
Fermé
safowan
Messages postés
174
Date d'inscription
lundi 25 juin 2007
Statut
Membre
Dernière intervention
22 juin 2022
-
22 juin 2022 à 14:27
jee pee Messages postés 40458 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 novembre 2024 - 23 juin 2022 à 09:03
jee pee Messages postés 40458 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 18 novembre 2024 - 23 juin 2022 à 09:03
A voir également:
- Repartir les données de la table SQL
- Table ascii - Guide
- Table des matières word - Guide
- Effacer les données de navigation - Guide
- Reinstaller windows sans perte de données - Guide
- Comment sauvegarder toutes les données de mon téléphone - Guide
4 réponses
jee pee
Messages postés
40458
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
18 novembre 2024
9 420
Modifié le 22 juin 2022 à 15:30
Modifié le 22 juin 2022 à 15:30
Bonjour,
Une proposition à affiner, je ne suis pas très expert en mysql, et ne possède pas de quoi tester ce code.
Partir du rang des élèves, en utilisant une variable (il existe une fonction row_num() à partir de mysql 8)
puis utiliser la fonction modulo sur le rang pour déterminer la classe, ici pour 3 classes, on a comme résultat 0,1,2
Une proposition à affiner, je ne suis pas très expert en mysql, et ne possède pas de quoi tester ce code.
Partir du rang des élèves, en utilisant une variable (il existe une fonction row_num() à partir de mysql 8)
select nom, moyenne, (@rownum := @rownum + 1) as rang from eleve, (select @rownum := 0) r order by moyenne desc
puis utiliser la fonction modulo sur le rang pour déterminer la classe, ici pour 3 classes, on a comme résultat 0,1,2
select nom, moyenne, (@rownum := @rownum + 1) % 3 as classe from eleve, (select @rownum := 2) r order by moyenne desc
yg_be
Messages postés
23337
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
22 juin 2022 à 14:56
22 juin 2022 à 14:56
bonjour,
il suffit probablement d'ajouter une requête UPDATE au travail que tu as réalisé.
il suffit probablement d'ajouter une requête UPDATE au travail que tu as réalisé.
jordane45
Messages postés
38290
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2024
4 704
22 juin 2022 à 15:01
22 juin 2022 à 15:01
Bonjour,
Ce n'est pas tellement une question propre au langage .. mais plus un problème d'algo je pense ..
En gros,
Tu divises le nombre d'élèves par le nombre de classes voulues
Tu prends le nombre d'elèves et tu fais un modulo sur le nombre trouvé précédemment pour savoir si la division tombe juste ou si tu as des virgules.... si tu as des virgules, tu prendra le nombre arrondi à l'entier supérieur pour la suite..
puis tu boucles sur la liste d'elèves et tu regardes si tu as atteint le nombre obtenu par la division précédente
Si oui.. tu génères un nouveau tableau.
Ce n'est pas tellement une question propre au langage .. mais plus un problème d'algo je pense ..
En gros,
Tu divises le nombre d'élèves par le nombre de classes voulues
Tu prends le nombre d'elèves et tu fais un modulo sur le nombre trouvé précédemment pour savoir si la division tombe juste ou si tu as des virgules.... si tu as des virgules, tu prendra le nombre arrondi à l'entier supérieur pour la suite..
puis tu boucles sur la liste d'elèves et tu regardes si tu as atteint le nombre obtenu par la division précédente
Si oui.. tu génères un nouveau tableau.
jee pee
Messages postés
40458
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
18 novembre 2024
9 420
Modifié le 23 juin 2022 à 09:04
Modifié le 23 juin 2022 à 09:04
D'abord est-ce que en sql pur, la requête fonctionne, avant de la mettre en php, puisque c'était une proposition de ce que j'aurais essayé de faire ?
Après en php, et une seule requête, tu auras toujours un seul résultat. Si tu veux des séparations, il faut que tu gères une rupture, je ne sais pas comment, probablement en faisant non pas un traitement global du résultat, mais un traitement ligne par ligne et comparant à la ligne précédente pour savoir si on change de classe.
Pour avoir le résultat trié par classe, on pourrait rajouter un niveau de select :
NB : dans
Après en php, et une seule requête, tu auras toujours un seul résultat. Si tu veux des séparations, il faut que tu gères une rupture, je ne sais pas comment, probablement en faisant non pas un traitement global du résultat, mais un traitement ligne par ligne et comparant à la ligne précédente pour savoir si on change de classe.
Pour avoir le résultat trié par classe, on pourrait rajouter un niveau de select :
select nomprenom, moyenne, classe from (select nomprenom, moyenne, (@rownum := @rownum + 1) % 3 as classe from eleve, (select @rownum := 2) r order by moyenne desc) order by classe asc, moyenne desc
NB : dans
@rownum := 22 est lié au nombre de classe, 3-1, donc là aussi il te faudrait utiliser la variable nb
22 juin 2022 à 22:10
J'ai essayé de changé la requête, en suivant vos consignes, mais toujours, je ne reçoit pas la table répartis en 3 sous tables. Plutôt la table de la base est copiée 3 fois.
Voile mon code PHP :