1
votes

SQL - Multiple Where dans une colonne

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


2 commentaires

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 utiliser OU .


Fournissez des exemples de données et les résultats souhaités.


3 Réponses :


2
votes

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%'


1 commentaires

@ChesterProfugo et si vous utilisez l'opérateur 'like': `où t.name comme '% Harmony% OU t.name comme'% CGN% '`



1
votes

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


0 commentaires

2
votes

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')


6 commentaires

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é