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

Pixar -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
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

3 réponses

Utilisateur anonyme
 
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.
1
Pixar7 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Merci. En fait il y a aussi un autre problème (et donc ça ne fonctionne toujours pas): La colonne contact_client_service appartient à la table crm_clients_contacts.

Comment récupérer donc cette table sans que cela m'affiche plusieurs fois le même nom.

J'ai fait:

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


Ca m'affiche tout sans tenir compte de la condition et 300 fois.
0
Utilisateur anonyme
 
C'est là que tu as besoin d'une jointure, mais on ne peut pas deviner laquelle sans savoir quel est le rapport entre cet autre champ et ceux que tu as déjà sélectionnés.
D'après ton SELECT entre parenthèses, ce serait TOUJOURS 'Commercial' :
SELECT contact_client_service ... WHERE contact_client_service = 'Commercial' ...

Ça ne peut donner que 'Commercial', et je doute que ce soit ce que tu veux.
0