5

したがって、「関連する投稿」を取得しようとするクエリがあります。

カテゴリは、投稿と 1 対多の関係にあります。タグには多対多の関係があります。したがって、私のテーブルはおおよそ次のようになります。

posts table:
id | category_id | ... | ...

tags table:
id | ... | ...

post_tag intermediate table:
id | post_id | tag_id | ... | ...

したがって、既に単一の投稿行があり、その「関連する」投稿を取得するものがある場合。私のロジックは、おおよそ、同じカテゴリにある投稿のみを取得したいが、それらの投稿を元の投稿と一致するタグの量で並べ替えたいというものです。したがって、元の投稿とまったく同じタグを持つ同じカテゴリの別の投稿は、一致度が非常に高くなるはずですが、タグの 3/4 しか一致しない投稿は、結果の下位に表示されます。

これが私がこれまでに持っているものです:

SELECT *
FROM posts AS p
WHERE p.category_id=?
ORDER BY ( SELECT COUNT(id) 
           FROM post_tag AS i 
           WHERE i.tag_id IN( ? )
         )
LIMIT 5

BINDINGS: 最初の投稿のカテゴリ ID。初期投稿タグ ID;

明らかに、これはサブセレクトの正しい値によって実際に結果を並べ替えるわけではありません。正しい結果を得るためにこれに参加する方法を考えようとして苦労しています。

前もって感謝します!

4

2 に答える 2

3

これを試して、

SELECT posts.* 
FROM   posts,(SELECT p.id, 
                     Count(pt.tag_id) AS count_tag 
              FROM   posts AS p, 
                     post_tag AS pt 
              WHERE  p.category_id = '***' 
                     AND pt.post_id = p.id 
                     AND pt.tag_id IN(SELECT tag_id 
                                      FROM   post_tag 
                                      WHERE  post_tag.post_id = '***') 
              GROUP  BY p.id 
              ) temp

WHERE  posts.id =temp.id ORDER  BY temp.count_tag desc

***すでに 1 つの投稿行があるため、どこに入力できますか

于 2012-10-06T17:56:44.823 に答える