Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2010, 16h57   #1
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
Par défaut Pb avec affichage du résultat d'une requête

Bonjour,

J'ai la requête suivante qui me permet de récupérer ici tous les postes faisant référence à "secretaire medicale"

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
 
SELECT `P`.*, `C`.*, `Cl`.*, `Ag`.*, `V`.*, `Dpt`.*, `R`.*, `pa`.*, `F`.*, `E`.*, `Exp`.*, `S`.* 
FROM `postes` AS `P` 
LEFT JOIN `contrats` AS `C` ON P.poste_contrat = C.contrat_id 
LEFT JOIN `clients` AS `Cl` ON P.cli_id = Cl.cli_id 
LEFT JOIN `agences` AS `Ag` ON P.agence_id = Ag.agence_id 
LEFT JOIN `villes` AS `V` ON (P.ville_id = V.ville_id) 
LEFT JOIN `departements` AS `Dpt` ON (P.poste_dpt = Dpt.dpt_id) 
LEFT JOIN `regions` AS `R` ON (P.poste_region = R.region_id) 
LEFT JOIN `pays` AS `pa` ON (P.poste_pays = pa.pays_iso_number) 
LEFT JOIN `fonctions` AS `F` ON P.poste_fonction = F.fonction_id 
LEFT JOIN `etude` AS `E` ON P.poste_etude = E.etude_id 
LEFT JOIN `postes_exp` AS `Exp` ON P.poste_experience = Exp.postes_exp_id 
LEFT JOIN `secteurs` AS `S` ON P.poste_secteur = S.secteur_id 
WHERE ((poste_intitule LIKE '%secretaire medicale%' OR poste_intitule LIKE '%secretaire%' OR poste_intitule LIKE '%medicale%' ) 
OR (poste_description LIKE '%secretaire medicale%' OR poste_description LIKE '%secretaire%' OR poste_description LIKE '%medicale%' ) 
OR (agence_rs LIKE '%secretaire medicale%' OR agence_rs LIKE '%secretaire%' OR agence_rs LIKE '%medicale%' ) 
OR (cli_rs LIKE '%secretaire medicale%' OR cli_rs LIKE '%secretaire%' OR cli_rs LIKE '%medicale%')) 
ORDER BY `poste_date_update` DESC
Ca marche bien seulement j'aurai aimé que les résultats ayant "secretaire medicale" soient les premiers c'est à dire avant les résultats n'ayant que "secrétaire" et ceux n'ayant que "medicale", mais je ne sais pas comment faire.

Pourriez-vous m'aider svp.

Merci d'avance!
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 17h20   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Tu peux utiliser CASE et ajouter des conditions si tu veux trier aussi entre secrétaire et médicale :
Code :
1
2
3
4
5
ORDER BY (case when poste_intitule LIKE '%secretaire medicale%' then 1 else 2 end)
		,(case when poste_description LIKE '%secretaire medicale%' then 1 else 2 end)
		,(case when agence_rs LIKE '%secretaire medicale%' then 1 else 2 end)
		,(case when cli_rs LIKE '%secretaire medicale%' then 1 else 2 end)
		,`poste_date_update` DESC
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 17h28   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 968
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 968
Points : 18 200
Points : 18 200
Envoyer un message via MSN à CinePhil
Simplement ajouter la colonne où tu recherches "secrétaire médicale" à l'ORDER BY et en DESC aurait pu aller mais comme tu cherches "secrétaire médicale" dans plusieurs colonnes, ça ne va pas être facile !

D'ailleurs, c'est bizarre de chercher "secrétaire médicale" dans agence_rs et dans cli_rs ! À moins que ce petit _rs signifie que ces colonnes ne stockent pas ce que le premier mot laisse à penser ?

Tu peux essayer d'ajouter un CASE WHEN dans le ORDER BY pour traiter tous les cas et leur affecter un ordre mais pas spur que ça fonctionne.

Je te donne le principe et je te laisse t'amuser avec tous les cas à envisager :
Code :
1
2
3
4
5
6
7
8
9
10
11
ORDER BY CASE
  WHEN poste_intitule LIKE '%secrétaire médicale%' THEN 1
  WHEN poste_description LIKE '%secrétaire médicale%' THEN 2
  WHEN agence_rs LIKE '%secrétaire médicale%' THEN 3
  WHEN cli_rs LIKE '%secrétaire médicale%' THEN 4
  WHEN poste_intitule LIKE '%secrétaire%' THEN 5
  WHEN poste_description LIKE '%secrétaire%' THEN 6
  WHEN agence_rs LIKE '%secrétaire%' THEN 7
  WHEN cli_rs LIKE '%secrétaire médicale%' THEN 8
-- etc
END
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 17h39   #4
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
Est_ce que je peux juste faire un:
Code :
1
2
ORDER BY CASE
  WHEN poste_intitule LIKE '%secrétaire médicale%' THEN 1
??

Les autres cas m'importe peu.
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 17h42   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Avec un else et un end, oui
Code :
ORDER BY case when poste_intitule LIKE '%secretaire medicale%' then 1 else 2 end,`poste_date_update` DESC
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 00h08   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
au passage :

Code sql :
1
2
 
poste_intitule LIKE '%secretaire%' OR poste_intitule LIKE '%medicale%'

te donnera les mêmes résultats que
Code sql :
1
2
 
poste_intitule LIKE '%secretaire medicale%' OR poste_intitule LIKE '%secretaire%' OR poste_intitule LIKE '%medicale%'

... mais plus rapidement
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 11h21   #7
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
Merci à tous pour votre aide.

J'ai juste un soucis avec le résultat de la requête, j'aimerai affiché les postes si et seulement si dans l'intitulé j'ai "secretaire" et dans la description j'ai "medicale".

Comment faire?

Est-ce que cette requête pourrai faire l'affaire?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT `P`.*, `C`.*, `Cl`.*, `Ag`.*, `V`.*, `Dpt`.*, `R`.*, `pa`.*, `F`.*, `E`.*, `Exp`.*, `S`.* 
FROM `postes` AS `P` 
LEFT JOIN `contrats` AS `C` ON P.poste_contrat = C.contrat_id 
LEFT JOIN `clients` AS `Cl` ON P.cli_id = Cl.cli_id 
LEFT JOIN `agences` AS `Ag` ON P.agence_id = Ag.agence_id 
LEFT JOIN `villes` AS `V` ON (P.ville_id = V.ville_id) 
LEFT JOIN `departements` AS `Dpt` ON (P.poste_dpt = Dpt.dpt_id) 
LEFT JOIN `regions` AS `R` ON (P.poste_region = R.region_id) 
LEFT JOIN `pays` AS `pa` ON (P.poste_pays = pa.pays_iso_number) 
LEFT JOIN `fonctions` AS `F` ON P.poste_fonction = F.fonction_id 
LEFT JOIN `etude` AS `E` ON P.poste_etude = E.etude_id 
LEFT JOIN `postes_exp` AS `Exp` ON P.poste_experience = Exp.postes_exp_id 
LEFT JOIN `secteurs` AS `S` ON P.poste_secteur = S.secteur_id 
WHERE ((poste_intitule LIKE '%secretaire%' AND poste_description LIKE '%medicale%' ) 
OR (poste_description LIKE '%secretaire%' AND poste_intitule LIKE '%medicale%' ) 
OR (agence_rs LIKE '%secretaire%' OR agence_rs LIKE '%medicale%' ) 
OR (cli_rs LIKE '%secretaire%' OR cli_rs LIKE '%medicale%')) 
ORDER BY (case when poste_intitule LIKE '%secretaire medicale%' then 1 else 2 end),(case when poste_intitule LIKE '%secretaire%' then 1 else 2 end),(case when poste_intitule LIKE '%medicale%' then 1 else 2 end),poste_date_update DESC
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 11h33   #8
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par sheira Voir le message
Code :
OR (poste_description LIKE '%secretaire%' AND poste_intitule LIKE '%medicale%' )
cette ligne me semble de trop, c'est l'inverse de ce que vous dite, et de la ligne du dessus d'ailleur ('secretaire' dans description et 'medical' dans intitulé...)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 11h43   #9
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
en faite faute que j'ai au moins l'un des mots dans l'intitulé et dans la description
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 11h50   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 968
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 968
Points : 18 200
Points : 18 200
Envoyer un message via MSN à CinePhil
Citation:
j'aimerai affiché les postes si et seulement si dans l'intitulé j'ai "secretaire" et dans la description j'ai "medicale".
Citation:
en faite faut que j'ai au moins l'un des mots dans l'intitulé et dans la description
Si tu changes le besoin à chaque message, on ne va pas y arriver !

Lis la phrase en bleu de ma signature et prends le temps de bien réfléchir au besoin.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 11h59   #11
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
Oui CinePhil autant pour moi, mais c'est un nouveau besoin.
Donc je reprend, il faut bien que j'ai au moins l'un des mots (secrétaire médicale) dans l'intitulé et dans la description.
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 12h04   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 968
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 968
Points : 18 200
Points : 18 200
Envoyer un message via MSN à CinePhil
Alors le WHERE de ta dernière requête semble convenir, à condition de supprimer les deux dernières lignes concernant agence_rs et cli_rs.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 12h11   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par sheira Voir le message
Oui CinePhil autant pour moi, mais c'est un nouveau besoin.
Donc je reprend, il faut bien que j'ai au moins l'un des mots (secrétaire médicale) dans l'intitulé et dans la description.
comme le dis CinePhil, réfléchit bien a ce que tu veux...

même cette phrase reste "aleatoire" et laisse encore des questions :
Est-ce que le mot doit être le même dans l'intitulé et dans la description.

donc ta phrase peut s'interpreter de deux façons différentes :
1 / il faut qu'il y ait "secrétaire" dans l'intitulé ET dans la description OU qu'il y ait "médicale" dans l'intitulé ET dans la description

2/ il faut qu'il y ait "secretaire" OU "medicale" dans l'intitulé ET qu'il y ait "secretaire" OU "medicale" dans la description

ton problème n'est pas un problème de SQL, mais bien un problème de définition du besoin : ton problème n'est pas de traduire l'une une l'autre des phrases ci dessus en SQL, mais bien de savoir laquelle traduire... et la on peut pas vraiment t'aider...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 14h04   #14
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
Ce que je veux c'est par exemple:

intilulé=secretaire et description=medicale
ou
intilulé=medicale et description=secretaire
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 14h39   #15
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 528
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 528
Points : 3 519
Points : 3 519
Saluton,
Peut-être quelque chose comme cela alors
Code sql :
WHERE CONCAT(poste_description,poste_intitule) IN ( 'secretaire,médicale','médicale,secrétaire')
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 14h42   #16
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 968
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 968
Points : 18 200
Points : 18 200
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par sheira Voir le message
Ce que je veux c'est par exemple:

intilulé=secretaire et description=medicale
ou
intilulé=medicale et description=secretaire
Encore une fois, tu exprime ton besoin différemment de la fois précédente !
Citation:
il faut bien que j'ai au moins l'un des mots (secrétaire médicale) dans l'intitulé et dans la description.
Au moins l'un des mots dans l'intitulé => intitule LIKE '%le_mot%'
intitulé = secrétaire => intulité = 'secrétaire'

C'est très différent !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 17h14   #17
Membre régulier
 
Inscription : janvier 2004
Messages : 440
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 440
Points : 89
Points : 89
Citation:
Envoyé par CinePhil Voir le message
Alors le WHERE de ta dernière requête semble convenir, à condition de supprimer les deux dernières lignes concernant agence_rs et cli_rs.
Cinéphil, c'est bon ça fonctionne!

Encore merci!
sheira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h33.


 
 
 
 
Partenaires

Hébergement Web