PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 12-04-2012 18:16:01

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

probleme avec krsort() et rsort()

Bonjour,

Je veux trier les résultats d'une requête dans ma table, qui ressemble à ceci :
candidat1 | nbvoix_candidat1 | candidat2 | nbvoix_candidat2 |  etc.
où les valeurs de nbvoix_candidatX sont des nombres entiers.

Je fais un select, une boucle, et ca me retourne un array avec le résultat.

Je veux trier les données de l'array avec pour clés les valeurs de nbvoix_candidatX, de façon à afficher la liste des candidats en fonction du plus grand nombre de voix au plus petit.

Problème avec krsort() : si 2 ou plus clés ont la même valeur, seul le premier résultat est affiché (et je ne sais pas suivant quel critère d'ailleurs).

J'ai donc essayé avec rsort(), qui réassigne des clés. Problème : rsort() fait un tri alphabétique inverse, donc avec  des nombres entiers, ça ne marche pas : 2 sera affiché avant 122455 car 2 est plus grand que 1 et seul le premier caractère est pris en compte.

Dans les deux fonctions j'ai essayé d'utiliser les constantes de type de tri SORT_NUMERIC, SORT_STRING, etc. mais rien à faire, les résultats ne s'affichent pas bien ordonnés.

Merci de votre aide.

Hors ligne

#2 12-04-2012 18:26:44

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : probleme avec krsort() et rsort()

Saluton,
Tout d'abord il ne s'agit pas d'un tri, mais d'un classement, on trie les lentilles ou le bon grain de l'ivraie là il s'agit de ranger, classer les données selon un ordre.
Pourquoi ne pas utiliser directement ORDER BY dans la requête ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 12-04-2012 18:34:24

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec krsort() et rsort()

Salut, merci de ta réponse. Désolé :-/,  classement, ok. Je ne peux pas utiliser ORDER BY parce que je ne trie classe pas sur une colonne de la table, mais dans une ligne.

Hors ligne

#4 12-04-2012 18:45:12

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec krsort() et rsort()

Voila le code simplifié :

<?php
$query = "SELECT ville,nom_candidat1,voix_candidat1,";
$query .= "nom_candidat2,voix_candidat2";
$query .= " FROM ma_table WHERE ville=$ville";
$result = mysql_query($query,$dbconnect) or die('Erreur SQL ! : '.$query.'<br />'.mysql_error());

while ($data = mysql_fetch_array($result))
{
$array = array(
"<!-- $data['voix_candidat1'] --><strong>".$data['nom_candidat1']."</strong>",
"<!-- $data['voix_candidat2'] --><strong>".$data['nom_candidat2']."</strong>"
);
rsort($array);
foreach($array as $key => $value) { echo $value; }
}
?>

La requete retourne obligatoirement une seule ligne de la table.
J'ai mis les valeurs de nombre de voix en début de chaine dans le array (et en commentaire html pour qu'il ne s'affiche pas).

Avec krsort(), ca donne :

$array = array(
"$data['voix_candidat1']"=>"<strong>".$data['nom_candidat1']."</strong>",
"$data['voix_candidat2']"=>"<strong>".$data['nom_candidat2']."</strong>"
);

Dernière modification par fanch75 (12-04-2012 19:06:29)

Hors ligne

#5 12-04-2012 20:51:38

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec krsort() et rsort()

Bon eh bien comme d'habitude souvent, en se creusant un peu les meninges lisant le manuel PHP, on y arrive. Merci MK pour ta réactivité en tout cas.
Donc la solution c'est avec array_multisort()

$array = array(
array(
$data['voix_candidat1'],
$data['voix_candidat2']
),
array(
$data['nom_candidat1'],
$data['nom_candidat2']
)
);

array_multisort($array[0], SORT_DESC, SORT_NUMERIC, $array[1]);
foreach ($array[1] as $key => $val) {
echo $val;
}

Dernière modification par fanch75 (12-04-2012 21:01:36)

Hors ligne

#6 12-04-2012 23:07:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : probleme avec krsort() et rsort()

Bonjour,

Décidément c'est une vrai maladie un vrai phénomène de société de vouloir faire en php ce qui doit être fait en SQL.
Tu peux m'expliquer en quoi ce que tu viens de faire est différent de ce que t'a proposé Mk?
Ton problème peut se résoudre en une seule et unique requête. Faudrait-il encore que cela t'interesse, ce que je doute, car visiblement comme la plupart, tu préfères utiliser les technologies sur lesquelles tu es le plus à l'aise / à la mode plutôt que d'opter pour un choix technique adapté/pertinent.

A partir de là, tu pourrais me demander par exemple dans quel cas utiliser array_multisort vs SQL? Appelons ta page de sortie ta "vue primaire". Elle doit être faite via SQL (1 appel serveur SQL + rendu affichage PHP sans traitement(s) supplémentaire(s) contrairement à ce que tu viens de faire). Si ensuite l'utilisateur désire changer l'ordre d'affichage d'une colonne de ton tableau, et admettons que tu souhaites travailler exclusivement en PHP à ce niveau, vu qu'il est complètement inutile de requêter un serveur SQL pour obtenir des données que tu as déjà sur ton serveur PHP, tu peux alors passer par array_multisort pour réorganiser l'affichage de ton tableau. Mais il y a encore plus propre: éviter de requêter le serveur PHP pour des données déjà présentes dans ton navigateur en faisant cela en javascript. Car si ton tableau est sujet à une utilisation intensive et que pour une raison X tu es obligé de requêter ton serveur pour une bonne raison (j'insiste), autant alors passer ta requête initiale dans une vue SQL.

Cordialement,

Jc

Dernière modification par Jc (13-04-2012 08:04:03)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 12-04-2012 23:26:28

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec krsort() et rsort()

Bonjour,
j'ai classé les données d'une ligne de ma table, et non pas les lignes par rapport à une colonne de ma table. ORDER BY dans une requête SQL classe les lignes par rapport à une donnée située dans une colonne de cette ligne, et n'a de sens que si plusieurs lignes sont retournées, si je ne m'abuse. Je ne vois pas comment ORDER BY peut modifier l'ordre d'affichage des données de la même ligne. Mais peut-être m'abuse-je, auquel cas je serai en effet interessé de comprendre mon erreur, que tu ne manqueras pas, ô grand maitre, de m'expliciter en détail. Avec un peu moins d'agressivité, ta pédagogie n'en gagnera que plus en efficacité, je m'en esbaubirai et rendrai un culte régulier (mais secret) à ta maitrise parfaite des technologies has been.

[réponses croisées] Réponse à la 2e partie du message :

Oui je comprends, mais ce n'était pas mon problème. Je ne veux pas que l'utilisateur puisse faire des classements. Je voulais effectivement ordonner un tableau, dont les données sont des valeurs d'une seule ligne de ma table.

Cordialement aussi (ca fait du bien),

Fanch

Dernière modification par fanch75 (12-04-2012 23:35:49)

Hors ligne

#8 12-04-2012 23:36:37

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : probleme avec krsort() et rsort()

O_o

Excuse moi mais..... je n'arrive plus à me retenir.....:lol:


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 12-04-2012 23:50:35

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : probleme avec krsort() et rsort()

Juste au cas où tu décides d'effacer ta réponse après une bonne relecture, j'ai fait un screen, j'espère que tu n'en voudras pas à un has been de te citer librement ultérieurement.

Cordialement,

Jc

(:lol:)

Dernière modification par Jc (13-04-2012 03:53:20)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 13-04-2012 00:02:17

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : probleme avec krsort() et rsort()

Et oui, on en revient toujours au même problème (has been oblige), quand on ne sait pas modéliser une base de données, on ne vit plus que d'expédients.
Laisse tomber, Jc, je crois que nous avons mieux à faire.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#11 13-04-2012 10:23:01

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec krsort() et rsort()

@Jc : bien sur, pas de probleme pour me citer, ca te permettra de briller encore plus si c'est possible, la lumière qui émane de ta personne est déja aveuglante.

@MK : Eh oui, vivre d'expédients... on en est tous là.

Juste une précision : la modélisation de ma base, ce n'est pas moi qui l'ai faite. Par ailleurs, j'ai demandé de l'aide sur un point précis, sans expliquer tout mon code, et ce pour être simple et synthétique.
Quant à "has been" je n'y ai fait référence que par rapport aux "technologies à la mode" évoquées par Jc. Je ne savais pas qu'il y avait des modes dans les technologies, mais c'est vrai que je ne suis pas un grand maitre jedi, juste un petit paddawan.

Allez, je vous laisse, vous avez surement mieux à faire en effet : mépriser ceux qui n'ont pas votre niveau par exemple. Ca semble vous occuper pas mal.

Dernière modification par fanch75 (13-04-2012 10:33:31)

Hors ligne

#12 13-04-2012 10:31:15

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : probleme avec krsort() et rsort()

Je ne vois pas ou tu vois du mépris !!!!!
moi, je vois plutôt de la déception.
a++

Hors ligne

#13 13-04-2012 10:36:08

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : probleme avec krsort() et rsort()

Des efforts didactiques j'en ai fait pas mal déjà avec vous. Seuleument quand on ne sait pas, en général on commence par demander, on evite ensuite
1) de reprendre à tord ceux qui prennent le temps de vous expliquer.
2) de dire plus d'une fois des choses et leur contraire dans la même phrase
3) au lieu de se braquer, on essaye de comprendre les explications données.

Bonne continuation

EDIT: Pierrot à bien résumé la chose sad

Dernière modification par Jc (13-04-2012 10:37:04)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#14 13-04-2012 10:45:29

fanch75
Membre
Inscription : 14-05-2009
Messages : 47

Re : probleme avec krsort() et rsort()

Je ne vois pas ou tu vois du mépris !!!!!

Apelle ca de la déception, moi j'appelle ca de l'ironie méprisante :

Laisse tomber, Jc, je crois que nous avons mieux à faire.

j'espère que tu n'en voudras pas à un has been de te citer librement ultérieurement.

Faudrait-il encore que cela t'interesse, ce que je doute, car visiblement comme la plupart, tu préfères utiliser les technologies sur lesquelles tu es le plus à l'aise / à la mode plutôt que d'opter pour un choix technique adapté/pertinent.

C'est moi qui suis décu, j'ai demandé de l'aide sur ce forum auparavant et MK m'a toujours répondu, avec pédagogie, sans donner la solution toute faite, mais en mettant sur la piste. Toi aussi si je me souviens bien. C'est quelque chose qu'on ne trouve que rarement ailleurs. J'ai l'impression qu'à force de répondre à des personnes qui n'ont pas leur niveau de compétence, une certaine fatigue s'est installée

Excuse moi mais..... je n'arrive plus à me retenir.....

, pour ne pas dire une certaine irritabilité, ce que je peux comprendre... Enfin bon, c'est grâce à PHPdebutant que j'ai commencé à développer un peu, j'espère avec des bonnes pratiques. Merci quand même MK...

Hors ligne

#15 13-04-2012 11:09:42

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : probleme avec krsort() et rsort()

>>Enfin bon, c'est grâce à PHPdebutant que j'ai commencé à développer un peu, j'espère avec des bonnes pratiques.

pour ça, c'est raté sadhmm

a++

Hors ligne

#16 13-04-2012 12:01:17

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : probleme avec krsort() et rsort()

Va quand même falloir qu'on mette un SAV en ligne, tous ces "clients" mécontents, ça fait désordre.
Et puis au prix qu'ils payent, ils ont bien droit de se plaindre, non ?
Il est vrai que nous autres n'avons rien d'autre à faire que d'attendre leurs questions et leurs remontrances.
Bon, allez, circulons, il n'y a rien de positif à tirer de cette anicroche.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#17 13-04-2012 12:24:54

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : probleme avec krsort() et rsort()

Bonjour,

Allez, bien que l'on ne soit pas dans un remake de dracula par mel brooks (pour savoir qui a le dernier mot), je vais faire un dernier effort, puisque Monsieur jette la pierre, je vais la renvoyer en te mettant les points sur les i.

fanch75 a écrit :

Salut, merci de ta réponse. Désolé :-/,  classement, ok. Je ne peux pas utiliser ORDER BY parce que je ne trie classe pas sur une colonne de la table, mais dans une ligne.

Déjà désolé de te défriser, mais tu commences mal avec cette première réponse. Je te rappele que tu viens demander de l'aide sur un sujet dont tu n'as aucune idée comment la résoudre, et déjà tu emets un avis non éclairé sur une réponse pertinente à ton problème, et tu ne t'inscris pas dans une démarche d'apprentissage puisque c'est toi qui explique à MK qu'il est à côté de la plaque.

Alors oui déjà à ce stade, il y a déjà de la déception de notre part vis-à-vis de ta démarche d'où ma conclusion

jc a écrit :

Ton problème peut se résoudre en une seule et unique requête. Faudrait-il encore que cela t'interesse, ce que je doute, car visiblement comme la plupart, tu préfères utiliser les technologies sur lesquelles tu es le plus à l'aise / à la mode plutôt que d'opter pour un choix technique adapté/pertinent.

que cela ne t'interesse pas et que tu préféres de fait rester dans une solution PHP à ton problème de part ta première réponse. D'où mon constat général dans lequel je suis navré, et certes un peu irrité de ta réaction vis-à-vis de MK, qui me semble non justifiée.

fanch75 a écrit :

ORDER BY dans une requête SQL classe les lignes par rapport à une donnée située dans une colonne de cette ligne, et n'a de sens que si plusieurs lignes sont retournées, si je ne m'abuse. Je ne vois pas comment ORDER BY peut modifier l'ordre d'affichage des données de la même ligne.

Alors je n'ai pris ici que cette phrase (que je ne vais pas commenter dans le détail), car je ne voudrais pas que tu penses que je m'acharne contre toi. Mais juste pour te mettre sur la voie d'une manière qu'il me plaît (j'ai encore cette liberté), il ne me semble pas non plus que array_multisort fasse un tri sur une seule ligne^^.

pour la forme

fanch75 a écrit :

...Je ne vois pas comment ORDER BY peut modifier l'ordre d'affichage des données de la même ligne... array_multisort($array[0], SORT_DESC, SORT_NUMERIC, $array[1]);...Je voulais effectivement ordonner un tableau...

et pour terminer

je m'en esbaubirai et rendrai un culte régulier (mais secret) à ta maitrise parfaite des technologies has been.

avec ce genre de remarque suite à une proposition de solution SQL que tu as rejeté en bloc car tu l'as considérée comme inapropriée grâce à ta grande expérience je suppose, il me paraît légitime de penser par conséquent que tu la considères toi même comme "has been", comme un developpeur confirmé PHP qui se situe dans la moyenne le pense actuellement.

Donc il me semble que l'on est resté courtois avec toi, et désolé de te dire que tes humeurs sont plus que légèrement déplacées et que tu peux te les mettre ou je pense pour rester une fois de plus courtois.

Cordialement,

Jc

Dernière modification par Jc (13-04-2012 12:36:45)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums