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

Fermé
Pixar - Modifié le 25 nov. 2018 à 11:05
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 27 nov. 2018 à 15:17
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
25 nov. 2018 à 11:38
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 dimanche 25 novembre 2018 Statut Membre Dernière intervention 26 novembre 2018
Modifié le 25 nov. 2018 à 12:16
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
25 nov. 2018 à 12:18
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