Maison > base de données > tutoriel mysql > Comment trouver efficacement du contenu correspondant à plusieurs balises dans SQL ?

Comment trouver efficacement du contenu correspondant à plusieurs balises dans SQL ?

Linda Hamilton
Libérer: 2025-01-05 12:47:40
original
546 Les gens l'ont consulté

How to Efficiently Find Content Matching Multiple Tags in SQL?

Requête SQL : intersections efficaces pour plusieurs balises

Lorsque vous travaillez avec une table de balises affectées à un contenu, il est courant d'avoir besoin d'identifier le contenu qui correspond à des combinaisons de balises spécifiques. Une approche naïve utilisant des sous-requêtes imbriquées peut rapidement devenir lourde pour plusieurs balises.

Pour réaliser cette intersection efficacement, nous pouvons exploiter la requête SQL suivante :

SELECT contentID
FROM tags
WHERE tagID in (334, 338, 342)
GROUP BY contentID
HAVING COUNT(DISTINCT tagID) = 3;
Copier après la connexion

Explication :

  • La clause WHERE sélectionne les lignes où le tagID correspond à l'une des balises fournies (par exemple, 334, 338, 342).
  • La clause GROUP BY regroupe les résultats par contentID, garantissant que chaque élément de contenu n'est représenté qu'une seule fois.
  • La clause HAVING filtre les résultats pour inclure les éléments de contenu qui ont toutes les balises spécifiées (dans l'exemple, COUNT(DISTINCT tagID) = 3).

En remplaçant la balise spécifique ID avec une liste paramétrée et en ajustant le nombre dans la clause HAVING, cette requête devient généralisable pour n'importe quel nombre de balises :

SELECT contentID
FROM tags
WHERE tagID in (...) --taglist
GROUP BY contentID
HAVING COUNT(DISTINCT tagID) = ... --tagcount;
Copier après la connexion

Cette approche optimisée fournit une solution robuste pour trouver efficacement l'intersection de plusieurs balises dans un tableau.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal