Problème avec ORDER BY

Problème avec ORDER BY - SQL/NoSQL - Programmation

Marsh Posté le 02-10-2018 à 11:21:45    

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

Reply

Marsh Posté le 02-10-2018 à 11:21:45   

Reply

Marsh Posté le 02-10-2018 à 12:03:31    

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
Reply

Marsh Posté le 02-10-2018 à 13:03:59    

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

Reply

Marsh Posté le 02-10-2018 à 13:56:15    

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
Reply

Marsh Posté le 02-10-2018 à 14:13:11    

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? :)

Reply

Marsh Posté le 02-10-2018 à 14:46:28    

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
Reply

Marsh Posté le 02-10-2018 à 17:16:25    

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
Reply

Marsh Posté le 03-10-2018 à 10:15:45    

Essayes avec membres_liste.nom IS NOT NULL ligne 5


---------------
D3
Reply

Marsh Posté le 03-10-2018 à 12:17:02    

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

Reply

Marsh Posté le 03-10-2018 à 13:40:44    

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
Reply

Marsh Posté le 03-10-2018 à 13:40:44   

Reply

Marsh Posté le 03-10-2018 à 19:51:04    

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...

Reply

Marsh Posté le 17-10-2018 à 08:14:58    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed