Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1325 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème avec ORDER BY

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec ORDER BY

n°2321573
bingojm
Posté le 02-10-2018 à 11:21:45  profilanswer
 

Bonjour à tous,
 
J'ai une table avec des noms de membres et une autre avec des noms d'invités.
Dans une requête, je vais rechercher des noms dans les deux tables.
Je voudrais que le résultat soit trié par noms puis par prénoms.
 
Mais en utilisant le code ci-dessous, il me trie d'abord les noms de la table des invités puis celle des membres.
Comment puis-je fusionner ces noms?
 
Merci d'avance!
 

Code :
  1. SELECT
  2. membres_liste.nom as m_nom,
  3. membres_liste.prenom as m_prenom,
  4. invites_liste.nom as i_nom,
  5. invites_liste.prenom as i_prenom
  6. FROM inscriptions
  7. LEFT JOIN membres_liste ON inscriptions.id_membre = membres_liste.id_membre
  8. LEFT JOIN invites_liste ON inscriptions.id_invite = invites_liste.id_invite
  9. WHERE participe = 1
  10. AND inscriptions.id_reunion = ".$result['id_reunion']."
  11. ORDER BY membres_liste.nom, invites_liste.nom, membres_liste.prenom, invites_liste.prenom

mood
Publicité
Posté le 02-10-2018 à 11:21:45  profilanswer
 

n°2321578
mechkurt
Posté le 02-10-2018 à 12:03:31  profilanswer
 

Réponse courte : tu  ne peux pas puisque ce sont des colonnes différentes
 
Par contre il y a peut être une bidouillerie à faire avec une instruction CASE :

Code :
  1. SELECT
  2. (CASE
  3.       WHEN membres_liste.nom <  invites_liste.nom THEN CONCAT(membres_liste.nom , ' ' , membres_liste.prenom)
  4.       ELSE CONCAT(invites_liste.nom , ' ' , invites_liste.prenom)
  5. END) as order
  6. membres_liste.nom as m_nom,
  7. membres_liste.prenom as m_prenom,
  8. invites_liste.nom as i_nom,
  9. invites_liste.prenom as i_prenom
  10. FROM inscriptions
  11. LEFT JOIN membres_liste ON inscriptions.id_membre = membres_liste.id_membre
  12. LEFT JOIN invites_liste ON inscriptions.id_invite = invites_liste.id_invite
  13. WHERE participe = 1
  14. AND inscriptions.id_reunion = ".$result['id_reunion']."
  15. ORDER BY order


---------------
D3
n°2321583
bingojm
Posté le 02-10-2018 à 13:03:59  profilanswer
 

Malheureusement cela ne fonctionne pas.
J'ai le message d'erreur suivant:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order membres_liste.nom as m_nom, membres_liste.prenom as ' at line 5

n°2321590
mechkurt
Posté le 02-10-2018 à 13:56:15  profilanswer
 

Ben déjà avec une virgule après as order ligne 5 ça marchera sans doute mieux (et le message d'erreur est relativement explicite)...


---------------
D3
n°2321592
bingojm
Posté le 02-10-2018 à 14:13:11  profilanswer
 

Je l'ai essayé avant de répondre mais non.
Le message d'erreur commence par order.
Si c'était la virgule, il aurait commencé après order...
une autre idée? :)

n°2321599
mechkurt
Posté le 02-10-2018 à 14:46:28  profilanswer
 

order étant un mot clef protégé, remplace par as trucmuche et ça devrait fonctionner...
 
Par contre je ne connais pas tes datas, vaux peut être mieux faire un case IS NOT NULL plutôt que CASE membre < invite


---------------
D3
n°2321617
bingojm
Posté le 02-10-2018 à 17:16:25  profilanswer
 

Je n'ai pas bien compris comment et où je devais écrire le IS NOT NULL...
J'ai mnt qqch qui s'affiche, mais l'ordre n'est pas bon. Les membres s'inscrivent dans l'ordre inverse de l'ordre d'inscription!
Et cela affiche d'abord les membres puis les invités.
Voici ce que j'ai:

Code :
  1. SELECT
  2. (CASE
  3.       WHEN membres_liste.nom <  invites_liste.nom THEN CONCAT(membres_liste.nom , ' ' , membres_liste.prenom)
  4.       ELSE CONCAT(invites_liste.nom , ' ' , invites_liste.prenom)
  5. END) as order_liste,
  6. membres_liste.nom as m_nom,
  7. membres_liste.prenom as m_prenom,
  8. invites_liste.nom as i_nom,
  9. invites_liste.prenom as i_prenom
  10. FROM inscriptions
  11. LEFT JOIN membres_liste ON inscriptions.id_membre = membres_liste.id_membre
  12. LEFT JOIN invites_liste ON inscriptions.id_invite = invites_liste.id_invite
  13. WHERE participe = 1
  14. AND inscriptions.id_reunion = ".$result['id_reunion']."
  15. ORDER BY order_liste ASC


Message édité par bingojm le 02-10-2018 à 17:18:58
n°2321663
mechkurt
Posté le 03-10-2018 à 10:15:45  profilanswer
 

Essayes avec membres_liste.nom IS NOT NULL ligne 5


---------------
D3
n°2321671
bingojm
Posté le 03-10-2018 à 12:17:02  profilanswer
 

mechkurt tu es mon héros!
Merci 1000x à toi. j'ai encore appris qqch grâce à toi!

n°2321674
mechkurt
Posté le 03-10-2018 à 13:40:44  profilanswer
 

Je n'avais jamais eu ce soucis, comme dit dans mon premier post, trier sur plusieurs colonnes simultanément est impossible (c'est un non sens pour un fonctionnement de base de donnée).
 
Par contre vu ton schéma, il semble qu'une inscription est soit un membre, soit un invité mais pas les 2, donc après quelque recherche [:alkatraz] on trouves des bouts de solution.
 
Si tu est développeur : soit curieux et apprend à poser tes questions au moteur de recherche.
 
[:ab614]


---------------
D3
mood
Publicité
Posté le 03-10-2018 à 13:40:44  profilanswer
 

n°2321705
bingojm
Posté le 03-10-2018 à 19:51:04  profilanswer
 

Je t'assure que ce n'est pas faute d'avoir cherché, mais des fois il n'est pas facile de trouver les bons mots-clés...
 
En fait, c'est pour une inscription d'un membre à un événement. Et ce membre pour inscrire un ou plusieurs invités.  
J'enregistre les membres (car ils sont déjà enregistrés) dans une table et les invités dans une autre (car ils ne sont pas encore connus).
Et au final, j'affiche toutes les personnes inscrites par ordre ASC.
Je ne voyais pas de meilleures solutions...

n°2322475
antac
..
Posté le 17-10-2018 à 08:14:58  profilanswer
 

Perso dans un cas comme ça,  j'aurais fait un Union de deux requêtes...une pour les membres, une pour les invités


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème avec ORDER BY

 

Sujets relatifs
[PHASER] Problème affichage sur tabletteProblème popup localisation
Conception plateforme achats (problème remue méninges)Problème avec l'id
[Perl] Optimisation code perl CGI - Problème de performanceProblème wordpress elementor
[VBS] Problème déplacement fichier[Php/Sql] Problème Order By
PHP SQL probleme ORDER BY , GROUP BY...[SQL] Problème Order By
Plus de sujets relatifs à : Problème avec ORDER BY


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR