Menu

Requête SQL: Classer des noms par ordre alphabétique et par catégorie

-
Bonjour, j'ai une liste de noms classés par ordre alphabétique et j'aimerais parmi ces noms afficher d'abord (toujours par ordre alphabétique) ceux appartenant à la catégorie "Commercial". Mais je n'y arrive pas.

Voici ma requête:

$MaRequete = "SELECT user_id AS UID, user_nom, user_prenom,
(SELECT contact_client_service FROM crm_clients_contacts WHERE contact_client_service = 'Commercial' ORDER BY contact_client_service)
FROM crm_users
WHERE user_id != '4' AND user_etat=0
ORDER BY user_nom,user_prenom";


Je note que la requête fonctionne mais le SELECT entre parenthèse ne fait aucun effet.

Configuration: Macintosh / Chrome 70.0.3538.102
Afficher la suite 

Votre réponse

3 réponses

Messages postés
6225
Date d'inscription
mardi 15 mai 2012
Dernière intervention
5 décembre 2018
0
Merci
Bonjour

Pour mettre la catégorie 'commercial' en premier, il te faut une fonction qui rend (par exemple) 1 pour la catégorie commercial et 2 pour les autres, et utiliser cette fonction en premier critère de tri.

La fonction est très simple en MySQL :
IF (contact_client_service = 'Commercial',1,2)
.

Tu n'as qu'à l'insérer en premier critère de ton ORDER BY :

SELECT user_id AS UID, user_nom, user_prenom, contact_client_service 
FROM crm_users
WHERE user_id != '4' AND user_etat=0
ORDER BY IF (contact_client_service = 'Commercial',1,2), user_nom,user_prenom


En ce qui concerne ton SELECT entre parenthèses, je suppose que tu avais en fait besoin d'une jointure, mais sans plus de précision je ne devine pas laquelle.
le père.
Messages postés
6225
Date d'inscription
mardi 15 mai 2012
Dernière intervention
5 décembre 2018
-
Oui, le site marche très mal depuis une heure. On dirait que ça va mieux, maintenant.
Un des champs contact_client_id et client_id de crm_clients_contacts correspond-il au champ user_id de crm_users ?
Pixar7
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
-
Non client_id est l'ID de client et user_id est l'ID utilisateur.
le père.
Messages postés
6225
Date d'inscription
mardi 15 mai 2012
Dernière intervention
5 décembre 2018
-
Si aucun des deux ne correspond à user_id, quel est le rapport entre les deux tables ?
Pixar7
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
-
Il n'y a pas de rapport. Mais il y a un moyen de filtrer les utilisateurs 'Commerciaux' puisque c'est ce qu'on m'a demandé de faire. Sauf que j'ai pas encore trouvé comment lier deux tables complètement différentes.
le père.
Messages postés
6225
Date d'inscription
mardi 15 mai 2012
Dernière intervention
5 décembre 2018
-
S'il n'y a pas de rapport entre les deux tables, ta question n'a pas de sens. Comment veux-tu rapprocher un utilisateur de ta table crm_users de la qualité de 'Commercial' qui ne figure que dans ta table crm_clients_contacts sans lien entre les deux ? Au hasard ?
Soit ce n'est pas vraiment ce qu'on t'a demandé, soit il y a un rapport entre les deux tables.
Commenter la réponse de le père.
Messages postés
23504
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 décembre 2018
0
Merci
Bonjour,

Quel champ fait le lien entre tes deux tables ?
Si on part du principe que tu as un "user_id" dans chacune d'elles.. tu peux faire un truc du genre
SELECT U.user_id AS UID
      ,U.user_nom
      ,U.user_prenom
      ,C.contact_client_service
     ,IF(contact_client_service = 'Commercial',1,0) as COMMERCIAL
FROM crm_users U
LEFT JOIN crm_clients_contacts C ON C.contact_client_id= U.user_id
WHERE U.user_id != '4' 
  AND U.user_etat=0
 GROUP BY U.user_id
ORDER BY COMMERCIAL DESC, user_nom,user_prenom



EDIT : modification de la requête pour utiliser : contact_client_id


Cordialement, 
Jordane                                                                 
Commenter la réponse de jordane45
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
0
Merci
Peut être que client_id est l'ID Client mais contact_client_id est relié à l'id user.
Pixar7
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
-
Non elle n'est pas traitée. Je n'arrive pas à obtenir le classement par ordre alphabétique.
Pixar7
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
-
UP.
Reivax962
Messages postés
3285
Date d'inscription
jeudi 16 juin 2005
Dernière intervention
26 novembre 2018
-
Tu peux remettre ici la dernière version de ta requête ?
Pixar7
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
-
SELECT U.user_id AS UID
      ,U.user_nom
      ,U.user_prenom
      ,C.contact_client_service
     ,IF(contact_client_service = 'Commercial',1,0) as COMMERCIAL
FROM crm_users U
LEFT JOIN crm_clients_contacts C ON C.contact_client_id= U.user_id
WHERE U.user_id != '4' 
  AND U.user_etat=0
 GROUP BY U.user_id
ORDER BY COMMERCIAL DESC


Dernière version.

Je rappelle le but est d'afficher:

- En premier les Commerciaux par ordre alphabétique
- Puis en dernier les Non-Commerciaux par ordre alphabétique aussi
jordane45
Messages postés
23504
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 décembre 2018
> Pixar7
Messages postés
13
Date d'inscription
dimanche 25 novembre 2018
Dernière intervention
26 novembre 2018
-
Commenter la réponse de Pixar7