2009-05-04 4 views
1

Ich möchte eine Liste verwandter Blogposts anzeigen und möchte, dass die Liste nach der Anzahl der allgemeinen Tags sortiert wird, die sie für den aktuellen Post haben. Jedem Beitrag können mehrere Tags zugeordnet sein. Hier ist meine Tabellenstruktur:Wie listet ich verwandte Blogposts geordnet nach der Anzahl der allgemeinen Tags auf?

[Beiträge] < - [Beiträge-to-Tags-joining-Tabelle] -> [Stichworte]

Ich bin mit PHP und MySQL - kann ich tun dies in eine Abfrage?

Antwort

0

Was ist mit ...:

SELECT COUNT(*) AS numcommon, posts.pid, posts.post FROM posts 
       INNER JOIN p2t ON p2t.pid = posts.pid 
       WHERE p2t.tid IN 
       (SELECT p2t.tid FROM p2t 
       INNER JOIN posts ON p2t.pid = posts.pid 
       WHERE posts.pid = 1) 
       AND posts.pid != 1 
       GROUP BY posts.pid 
       ORDER BY numcommon 

unter der Annahme, pid als Primärschlüssel in der Tabelle Beiträge, tid als Primärschlüssel in die Tag-Tabelle, beide Fremdschlüssel in der Tabelle p2t (Post-to-Tag)?

5

Natürlich können Sie es in einer Abfrage tun:

SELECT postid, count(tagid) as common_tag_count 
FROM posts_to_tags 
WHERE tagid IN (SELECT tagid FROM posts_to_tags WHERE postid = 2) 
GROUP BY postid ORDER BY common_tag_count DESC;