[Résolu] Requête sql
#1
Bonsoir,

Je suis actuellement entrain de faire un tableau qui liste d'ABORD les utilisateurs avec un avatar en attente classés par avatar_time décroissant
SUIVI de la liste des autres utilisateurs classés par id décroissant, j'ai donc besoin de deux requêtes SQL relier par un UNION:

Voici la requête :

Code:
(
SELECT ao.id, ao.nick, nc.email, ao.datenaissance, ao.sexe, ao.ville, ao.description, ao.avatar, ao.dateinscription, ao.ip, ao.latest_co, ao.statusavatar, ao.avatar_time
FROM anope_db_NickAlias na
JOIN anope_db_NickCore nc ON nc.display=na.nick
JOIN anope_other ao ON ao.nick=na.nc
WHERE ao.statusavatar="En attente"
ORDER BY ao.avatar_time DESC
) UNION (
SELECT ao.id, ao.nick, nc.email, ao.datenaissance, ao.sexe, ao.ville, ao.description, ao.avatar, ao.dateinscription, ao.ip, ao.latest_co, ao.statusavatar, ao.avatar_time
FROM anope_db_NickAlias na
JOIN anope_db_NickCore nc ON nc.display=na.nick
JOIN anope_other ao ON ao.nick=na.nc
WHERE ao.statusavatar<>"En attente"
ORDER BY ao.id DESC
)
j'ai bien d'abord les avatars en attente puis les autres mais le tri n'est pas bon, j'ai l'impression qu'il fait un ASC sur l'id pour les deux requêtes.

Bizarrement , les deux requêtes séparées , tester indépendamment donnent le bon résultat attendu.

Cela doit peut être venir de la syntaxe de l'UNION, j'ai regardé un peu sur overstack :

Le forum ne m'autorise pas à mettre de lien, j'ai une erreur :
  • Vous n'êtes pas autorisé à mettre une url dans votre message
  Reply
#2
Bonjour Amand,

As-tu essayé de mettre le tri sur les 2 champs à chaque fois ? ORDER BY ao.avatar_time DESC, ao.id DESC pour la première partie de la requête puis ORDER BY ao.id DESC, ao.avatar_time DESC pour la seconde ?
zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
  Reply
#3
J'ai toujours le même résultat
  Reply
#4
Il y a effectivement un souci, quand on fait un UNION, la plupart des BD créent une table temporaire et appliquent le dernier tri vu sur l'intégralité de cette table.
Et d'après certains de mes tests, les résultats de tri peuvent être assez étranges.

Si ton utilisation des données se fait en PHP, je pense que tu devrais faire une requête plus simplifiée:

Code:
SELECT ao.id, ao.nick, nc.email, ao.datenaissance, ao.sexe, ao.ville, ao.description, ao.avatar, ao.dateinscription, ao.ip, ao.latest_co, ao.statusavatar, ao.avatar_time
FROM anope_db_NickAlias na
JOIN anope_db_NickCore nc ON nc.display=na.nick
JOIN anope_other ao ON ao.nick=na.nc
ORDER BY FIELD(ao.statusavatar, 'En Attente', 'Validé', NULL), ao.avatar_time DESC
et ensuite faire ton tri en PHP.

Et c'est une assez mauvaise idée de mettre un statut en littéral, il vaut mieux mettre un id qui t'évitera des soucis d'interprétation des caractères
zeolia: tchat gratuit, sans inscription ni publicité
Merci de ne pas demander d'aide en MP
Away
  Reply
#5
La requête fait le travail , merci à toi.
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Requete sql anope Epsilon 3 2,962 17/07/2017, 23:43
Last Post: Strategy

Forum Jump:


Users browsing this thread: 1 Guest(s)