Désolé les gars, j'utilisais un exemple différent, au lieu d'utiliser la table COuntry de w3school, j'ai mis à jour ma question et vous donne la situation réelle.
J'utilise wordpress et je veux filtrer tous les messages avec plusieurs catégories. p>
AND t.name IN ('CGN','Harmony','cfw')
Je veux utiliser raw sql parce que je sais que les conditions seront plus longues que cela.
Voici ce que je reçois https://d.pr/free/i/mrNHXk
Mais quand j'ai ajouté ceci
AND t.name IN ('CGN','Harmony')
Je n'ai obtenu aucun résultat, je m'attends à ça https://d.pr/free/i/0NER1F
Utiliser
`AND t.name = 'CGN' AND t.name = 'Harmony'`
ne fonctionnera pas car le résultat doit avoir à la fois 'cgn' et 'harmonie', si j'ai ajouté 'cfw' à la condition comme
`SELECT DISTINCT p.id,p.post_title,p.post_content,t.name,tax.taxonomy from wp_posts as p LEFT JOIN wp_term_relationships rel ON rel.object_id = p.ID LEFT JOIN wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id LEFT JOIN wp_terms t ON t.term_id = tax.term_id WHERE 1=1 AND p.post_status = 'publish' AND p.post_title LIKE '%lorem%' OR p.post_content LIKE '%lorem%' `
Le message de résultat doit avoir ces 3 catégories
3 Réponses :
vous n'obtiendrez aucun résultat de cette requête. La raison en est que la valeur Pays ne peut pas être à la fois "Allemagne" et "USA" en même temps (de manière logique / propositionnelle).
Essayez:
SELECT * FROM Clients WHERE Pays en ('Allemagne', 'USA')
autre possibilité:
SELECT * FROM Clients WHERE Pays comme '% Germany%' ou comme '% USA%'
@ChesterProfugo et si vous utilisez l'opérateur 'like': `où t.name comme '% Harmony% OU t.name comme'% CGN% '`
Comme indiqué ci-dessus, le cas où le pays est à la fois l'Allemagne et les États-Unis ne devrait pas exister. Il semblerait que vous cherchiez:
SELECT * FROM Customers WHERE Country IN ('Germany', 'USA');
L'utilisation de la clause IN avec une liste renverra toutes les lignes de la table client où le pays contient soit l'Allemagne ou les États-Unis.
https://www.w3schools.com/sql /trysql.asp?filename=trysql_select_in2
Ne joignez pas directement les tables de taxonomie, mais utilisez une sous-requête et les existe prédicat pour vérifier si les balises Harmony et CGN existent pour le message.
select p.id, p.post_title, p.post_content, (select GROUP_CONCAT(t.name) from wp_term_relationships rel inner join wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id inner join wp_terms t ON t.term_id = tax.term_id where rel.object_id = p.ID) as terms from wp_posts as p where p.post_status = 'publish' and (p.post_title LIKE '%lorem%' OR p.post_content LIKE '%lorem%' ) and exists (select * from wp_term_relationships rel inner join wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id inner join wp_terms t ON t.term_id = tax.term_id where rel.object_id = p.ID and t.name = 'Harmony') and exists (select * from wp_term_relationships rel inner join wp_term_taxonomy tax ON tax.term_taxonomy_id = rel.term_taxonomy_id inner join wp_terms t ON t.term_id = tax.term_id where rel.object_id = p.ID and t.name = 'CGN')
Cela fonctionne, merci ma seule préoccupation est que j'ai besoin de nommer le nom sur les champs sélectionnés afin que je puisse l'utiliser. Comment pourrais-je ajouter les champs renvoyés
Pour l'instant, j'ai besoin du post_title, id.content et du terme nom comme de wp_terms, si vous pouvez me dire comment ajouter des champs supplémentaires à partir de cette table, je peux développer le code à partir de là, j'apprécie votre aide :)
@ChesterProfugo Cette instruction ne renvoie qu'une seule ligne pour chaque publication. Voulez-vous avoir tous les termes de la publication comme informations supplémentaires dans la ligne? Ou voulez-vous réellement avoir des lignes de résultats différentes pour chaque terme? Et puis uniquement pour les termes que vous recherchiez ou pour tous les termes du poste? Et pourquoi?
pas de soucis, tu m'as assez aidé, je pense que c'est ce dont j'ai besoin pour l'instant. Merci beaucoup, y compris le nom de wp_term est juste une possibilité mais je peux vivre sans ça pour le moment. Encore merci
@ChesterProfugo J'ai ajouté une sous-requête pour ajouter la liste des termes de chaque article en tant que colonne au résultat.
Merci beaucoup, je me gratte la tête sur ce problème depuis 2 jours maintenant, tu m'as vraiment beaucoup aidé
Il est clair que la valeur de la colonne
Pays
dans une seule ligne ne peut pas être à la fois "Allemagne" et "USA" en même temps; vous avez peut-être voulu utiliserOU
.Fournissez des exemples de données et les résultats souhaités.