1

まあ、これは私にとってヘッドスクラッチャーです。タグ付きの投稿システムがあります。タグは投稿と多対多の関係です。

問題は、現在の投稿と一致するタグの数に基づいて他の投稿を選択したいということです。

簡単な視覚的な例:

PostA: TagA, TagB
PostB: TagC
PostC: TagA
PostD: TagA, TagB

PostA と入力すると、PostD、PostC が表示されます。

私は本当にこれをどこから始めるべきかさえ知りません.私はすでにこの問題に遭遇したよりも賢い誰かが助けを提供できることを望んでいます.

4

2 に答える 2

5

OK、タグ付けされた投稿テーブルが実際に次のようになっているとします。

PostA   TagA
PostA   TagB
PostB   TagC
PostC   TagA
PostD   TagA
PostD   TagB

その後、あなたがしたい

SELECT post FROM tagged_posts
  WHERE post != 'PostA'
  AND tag in (SELECT tag FROM tagged_posts WHERE post = 'PostA')
  GROUP BY post
  ORDER BY COUNT(*) desc
于 2012-07-13T23:24:15.080 に答える
0

誰かが興味を持っているなら、これがワードプレス版です。タグを使用します(ただし、カテゴリに合わせて簡単に変更できます)。それが他の誰かにも役立つことを願っています。

注:必要な2つの変数、$ wpdbクラス(関数で呼び出される場合はグローバル化する必要があります)と、the_post()の呼び出しで自動的に設定される$ post-> IDですが、それ以外の場合は手で設定します。

$query = $wpdb->get_results("
SELECT posts.*
FROM {$wpdb->term_relationships} as relate
LEFT JOIN {$wpdb->term_taxonomy} as taxonomy
    ON relate.term_taxonomy_id = taxonomy.term_taxonomy_id
LEFT JOIN {$wpdb->terms} as terms
    ON taxonomy.term_id = terms.term_id
LEFT JOIN {$wpdb->posts} as posts
    ON posts.ID = object_id
WHERE object_id != '{$post->ID}'
    AND taxonomy = 'post_tag'
    AND taxonomy.term_id in
        (
            SELECT term_id
            FROM {$wpdb->term_relationships} as relate
            LEFT JOIN {$wpdb->term_taxonomy} as taxonomy
                ON relate.term_taxonomy_id = taxonomy.term_taxonomy_id
            WHERE object_id = '{$post->ID}'
        )
GROUP BY object_id
ORDER BY COUNT(*) desc
");
于 2012-07-14T00:11:27.737 に答える