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 05/08/2011, 11h34   #1
Candidat au titre de Membre du Club
 
Homme Alexandre Sagette
Étudiant
Inscription : décembre 2006
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Sagette
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2006
Messages : 36
Points : 12
Points : 12
Par défaut select avec condition sur deux enregistrements d'une même colonne

Bonjour,

je souhaite récupérer des données d'une base gérée par un site Worpress.
N'étant pas libre de l'organisation de cette base, il me faut récupérer des enregistrements avec condition sur deux enregistrements:
  • une table wp_posts contient les articles que je dois récupérer
  • une table wp_postmeta contient des infos supplémentaires sur les articles.
    toutes les infos d'un article sont contenues dans des enregistrements différents avec pour chacun une colonne avec l'id de l'article concerné. Un enregistrement par info.

Comment puis-je faire pour récupérer un article avec un critère sur deux informations ?
herbert8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 11h44   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 437
Points : 6 437
Bonjour,

Si j'ai bien compris la question (mais un petit exemple des données contenues et du résultat attendu nous aurait d'avantage permis de comprendre le problème), il suffit de faire 2 jointures sur la table des infos, avec chaque info précisée dans la condition de jointure.
Puis mettre les conditions dans la clause WHERE.
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 14h56   #3
Candidat au titre de Membre du Club
 
Homme Alexandre Sagette
Étudiant
Inscription : décembre 2006
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Sagette
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2006
Messages : 36
Points : 12
Points : 12
Un exemple

table wp_posts: id, post_title, post_content
table wp_postmeta: id_meta, id_post, meta_key, meta_value
(j'ai renommé certains champs pour plus de clarté)

exemples enregistrements:
wp_posts
(5, 'je suis un titre', 'je suis un article')
(6, 'blabla', blablabla')


wp_postmeta
(1, 5, 'region', 'Alsace')
(2, 5, 'filiere', 'Bac')
(3, 6, 'region', 'Bretagne')
(4, 6, 'filiere', 'BTS')
(5, 7, 'region', 'Alsace')
(6, 7, 'filiere', 'BEP')


Pour obtenir uniquement les articles concernant telle région ou telle filière, cela ne me pose pas de problème.
Ce qui m'en pose en revanche, c'est d'obtenir les articles de l'Alsace et Bac par exemple.
herbert8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 15h50   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 437
Points : 6 437
Et donc, avec 2 jointures, ça donne :
Code :
1
2
3
4
5
6
SELECT p.id AS post_id, p.post_title, p.post_content
FROM wp_posts AS p
INNER JOIN wp_postmeta m1 ON p.id = m1.id_post AND m1.meta_key = 'region'
INNER JOIN wp_postmeta m2 ON p.id = m2.id_post AND m2.meta_key = 'filiere'
WHERE m1.meta_value = 'Alsace'
AND m2.meta_value = 'Bac'
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2011, 16h01   #5
Candidat au titre de Membre du Club
 
Homme Alexandre Sagette
Étudiant
Inscription : décembre 2006
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Sagette
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2006
Messages : 36
Points : 12
Points : 12
J'intègre le code et je vous tiens au courant.
Merci
herbert8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 10h22   #6
Candidat au titre de Membre du Club
 
Homme Alexandre Sagette
Étudiant
Inscription : décembre 2006
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Sagette
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2006
Messages : 36
Points : 12
Points : 12
Cela n'a pas fonctionné.
J'ai testé avec m1.meta_value = 'Lorraine' et m2.meta_value = 'BTS' pour correspondre avec mes données.

J'ai joint des exemples de mes deux tables en image. Ce sera sans doute plus parlant…
Images attachées
Type de fichier : jpg wp_posts.jpg (55,6 Ko, 2 affichages)
Type de fichier : jpg wp_postmeta.jpg (42,0 Ko, 2 affichages)
herbert8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 11h15   #7
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 437
Points : 6 437
Ça veut dire quoi exactement "cela n'a pas fonctionné" ? Pas le résultat attendu ? Un message d'erreur ?
La requête que j'ai fournie, avec les éléments à disposition, fonctionne (pour une fois que je teste...).

En revanche, à la lecture des copies d'écran, je vois qu'il faut rajouter un S à 'region' et 'filiere' dans ma requête pour que ça renvoie un résultat.
Mais ça, je ne pouvais pas le savoir...

Ça marche mieux en rajoutant le "s" ?
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2011, 11h42   #8
Candidat au titre de Membre du Club
 
Homme Alexandre Sagette
Étudiant
Inscription : décembre 2006
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Sagette
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : Communication - Médias

Informations forums :
Inscription : décembre 2006
Messages : 36
Points : 12
Points : 12
shame on me…

Ça fonctionne avec les -s.

Merci beaucoup pour votre aide,
je ne m'en sortais plus.
herbert8 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 10h50.


 
 
 
 
Partenaires

Hébergement Web