Nasıl ortak etiketleri sayısına göre sipariş ilgili blog mesajları liste mi?

2 Cevap php

Ben ilgili blog mesajların listesini görüntülemek istiyorum ve ben liste geçerli mesaja sahip oldukları ortak etiketleri sayısına göre sipariş etmek istiyorum. Her yazılan buna bağlı birden çok etiketi olabilir. İşte benim tablo yapısı:

[Yayınlar] <- [ileti-to-etiketleri-birleştirme-table] -> [Etiketler]

PHP ve MySQL kullanarak kulüpler - Ben bir sorgu yapabilirsiniz?

2 Cevap

Peki ...:

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

tablo (etiketlemek için yazılan) birincil mesajlar tablodaki anahtar etiketleri tabloda birincil anahtar olarak TID, hem P2T yabancı anahtar olarak kimlikno varsayarak?

Tabii tek bir sorguda bunu yapabilirsiniz:

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;