Order by et union

Fermé
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012 - 8 mars 2009 à 10:00
 OlaaSultan.. - 9 mars 2009 à 21:17
Bonjour,

J'ai cherché sur le net mais je trouve pas la réponse adéquate à mon problème alors je m'en remet à vous.
J'effectue la requête suivante, suivie d'un while.

mysql_query("(SELECT fiche_id, fiche_titre, fiche_note, fiche_description, fiche_url, fiche_top, fiche_entrees, fiche_sorties FROM fiches WHERE fiche_categorie = " . (int) $_GET['c'] . " AND fiche_top=0 ORDER BY fiche_note DESC) UNION (SELECT fiche_id, fiche_titre, fiche_note, fiche_description, fiche_url, fiche_top, fiche_entrees, fiche_sorties FROM fiches WHERE fiche_categorie = " . (int) $_GET['c'] . " AND fiche_top=1 ORDER BY fiche_entrees ASC) LIMIT " . $premiereFicheAAfficher . ", " . $nombreDeFichesParPage . " ") or die(mysql_error());

Mais le second order by <<fiche_entrees ASC>> n'a aucun effet.
Je ne comprends pas comment faire.

Merci beaucoup
En attente de vos réponses

7 réponses

Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
8 mars 2009 à 11:21
Quelqu'un peut t'il m'aider ?
Merci
0
CréNomDunChien !
8 mars 2009 à 11:53
Slt,

Peut tu nous donner le format de ce champ + nous mettre un lien sur un exemple d'enregistrements retournés ?..

Merci.
0
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
8 mars 2009 à 18:11
Merci pour ta réponse
Je ne comprends pas ce que tu veux dire par "format" du champ.
Il n'y a aucune erreur, mais le deuxième order by n'a aucun effet.

Enfaite ce que j'aimerais c'est d'abord trier les fiches par notes si elles remplissent la condition fiche_top=0
Puis ensuite quand toutes les fiches par note sont mises je mets les fiches qui remplissent la condition fiche_top=1 trier par fiche_entrees (visiteurs reçus).
0
OulaaLaNoisette
8 mars 2009 à 19:10
Re,

Tout d'abord :

Une question qui n'a peut être rien à voir mais a tu vraiment le droit d'écrire ceci en Sql ? :

(SELECT..)
UNION
(SELECT..)
LIMIT...

J'aurais fait ainsi pour ma part :

(SELECT... LIMIT..)
UNION
(SELECT ... UNION..)
0
OulaaLaNoisette > OulaaLaNoisette
8 mars 2009 à 19:11
Pardon,

Ceci plutôt bien sur :


(SELECT... LIMIT..)
UNION
(SELECT ...LIMIT..)
0
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
8 mars 2009 à 21:54
Bah moi j'ai fais la même chose sauf que j'ai mis le limit à la fin, faut que je laisse à la fin car par exemple j'affiche 8 fiches par page, je peux pas savoir combien j'affiche de fiche par note et de fiche par entrées.

ça m'enerve pourquoi le 2 ème order by se prend pas en compte.
0
Re,

Idée :

Le problème vient peut être de l'UNION - a t'il gardé réellement tes ordres de tris ASC et DESC de tes deux SELECT ???... car moi je ne sais à priori pas comment fonctionne l'algo. d'un UNION au niveau du tri des données.

Peut être que le problème vient de là.
0
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
9 mars 2009 à 12:54
Il prend bien en compte tout sauf le deuxième order by.
Vous avez pas une solution ?
0
OlaaMaNoisette
9 mars 2009 à 13:03
Re,

En supposant qu'il n'y aucune erreur dans ta requête :

Essaye de mettre un GROUP BY a ASC et GROUP BY b DESC plutôt qu'un ORDER BY a ASC et ORDER BY b DESC et dis nous ce que ça donne.

Normalement, ça revient strictement au même dans ce cas mais peut être que l'UNION aura un comportement différent par rapport aux GROUP BY.

Slt.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
9 mars 2009 à 20:39
Oh génial merci ça marche.
Trop content
0
OlaaSultan..
9 mars 2009 à 20:51
Re,

C'est vraiment un coup de pot - j'aurais bien aimé avoir des explications techniques quant au fonctionnement du tri au niveau de l'UNION.

A+ et met le topic en "résolu" si tu est satisfait.
0
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
9 mars 2009 à 20:54
Enfaite nan ça avait l'air de marcher mais enfaite ça ne sélectionne pas toutes les fiches.
Voir : https://www.lesmeilleursjeux.net/
ça marche pour les 2 premières pages mais pas les trois suivantes.
0
OlaaSultan..
9 mars 2009 à 21:07
Re,

Pas bien compris l'analogie avec ton lien fourni sur des "jeux de grattage".
0
Giriad Messages postés 25 Date d'inscription lundi 16 juin 2008 Statut Membre Dernière intervention 19 juillet 2012
9 mars 2009 à 21:11
Ok j'ai pigé, j'ai fais ça : $sqlCoupons = mysql_query("(SELECT fiche_id, fiche_titre, fiche_note, fiche_description, fiche_url, fiche_top, fiche_entrees, fiche_sorties FROM fiches WHERE fiche_categorie = " . (int) $_GET['c'] . " AND fiche_top=0 ORDER BY fiche_note DESC, fiche_entrees DESC) UNION (SELECT fiche_id, fiche_titre, fiche_note, fiche_description, fiche_url, fiche_top, fiche_entrees, fiche_sorties FROM fiches WHERE fiche_categorie = " . (int) $_GET['c'] . " AND fiche_top=1 ORDER BY fiche_entrees DESC, fiche_note DESC) LIMIT " . $premiereFicheAAfficher . ", " . $nombreDeFichesParPage . " ") or die(mysql_error());


ça à l'air de marcher
0
OlaaSultan..
9 mars 2009 à 21:17
Magnifique.

(:>) ...
0