J'ai ces tableaux: Posts (poste, titre et texte), Tags (tag_id, tag), Post_tag_nn (id, tag_id, post_id). Je veux pour un poste spécifique ayant par exemple 4 tags tous les messages avec ces tags, puis tous les messages avec trois de ces tags, puis tous les messages avec deux de ces tags et ainsi de suite. Comment puis-je construire une requête SQL à cet effet (en php, il semble être un problème de retour arrière = tous les sous-ensembles d'un ensemble donné).trouver les messages liés par des balises avec un poste spécifique dans mysql
Répondre
avez une question de trouver les balises du poste actuel, quelque chose comme
SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;
Ensuite, en utilisant ces id tag de cette requête devrait vous renvoyer les id de messages avec 4,3,2, ... mots-clés correspondants:
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;
Si vous souhaitez extraire tous les articles avec une seule balise, il est préférable de ne lancer qu'une seule requête par balise pour extraire tous les articles avec cette balise, puis générer les ensembles vous-même.
Je cherche une méthode SQL pour ce faire, quelque chose de plus efficace que le codage dur. – Daniel
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 puis faire le groupe dans votre code. Vous pouvez bien sûr faire deux requêtes différentes, l'une vous permettant de déterminer l'ordre et le nombre de vos tags, et l'autre vous permettant de récupérer la publication de chaque tag.
Cela fonctionne. Je vous remercie! – Daniel