Question

J'ai ces tableaux: Posts (post_is, titre et texte), Tags (tag_id, tag), Post_tag_nn (id, tag_id, post_id). Je souhaite pour un article spécifique ayant par exemple 4 tags tous les articles avec ces tags, puis tous les articles avec trois de ces tags, puis tous les articles avec deux de ces tags et ainsi de suite. Comment puis-je construire une requête SQL à cet effet (en php, cela ressemble à un problème de retour en arrière = tous les sous-ensembles d'un ensemble donné).

Était-ce utile?

La solution

Avoir une requête pour trouver les tags de la publication en cours, quelque chose comme

SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;

Ensuite, en utilisant ces identifiants de balises, cette requête devrait vous renvoyer les identifiants des publications avec 4,3,2, ... balises correspondantes:

SELECT post_id, COUNT(post_id) AS tag_count
FROM Post_tag_nn
WHERE tag_id IN ($array_of_tag_ids)
GROUP BY post_id
ORDER BY tag_count DESC;

Autres conseils

Si vous souhaitez afficher chaque publication avec une seule balise, il serait peut-être préférable de lancer une requête unique par balise pour extraire toutes les publications avec cette balise, puis de générer le vous définit.

Quelque chose comme:

select t.id, t.tag_id, p.post_id, p.title, p.text
  from post_tag_nn as t, posts p
  where p.id = t.post_id
  order by t.id

Et faites ensuite le groupe dans votre code. Vous pouvez bien sûr faire deux requêtes différentes, une où vous déterminez l'ordre et le nombre de balises, puis l'autre où vous récupérez le message pour chaque balise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top