2

私は現在、ユーザーがカテゴリ別に表示するコミックを選択できるコミックWebサイトを持っています:チャート、オフィス、ライフ、その他など。

StackOverflowにあるようなタグ付けシステムを実装したいと思います。これは、カテゴリではなく、各コミックのコンテンツの詳細を説明します。例:チャートカテゴリでは、いくつかのビジネス関連があります...

私の簡単な解決策は、分類を処理した方法で処理することです-

  1. tagid、tagname、tagdescriptionを使用して「タグ」テーブルを作成します
  2. コミックテーブルにtagid_ForeignKeyフィールドを追加し、各投稿にタグを追加します。
  3. ユーザーがタグをクリックすると、そのタグが付いた投稿のみが表示されます...または、カテゴリが指定されている場合は、その特定のタグが付いた特定のカテゴリが表示されます。

ただし、このアプローチでは、カテゴリごとに1つのタグに制限されているようです。ビジネスと人間関係に関連する漫画がある場合はどうなりますか...したがって、これらのタグの両方が必要になります。

コミックごとに複数のタグを付けるにはどうすればよいですか?


編集:

さらにいくつかの質問:

1)新しいリレーショナルテーブルに何を挿入しますか...何か?

2)また、のwhile ($row = $tag->fetch_assoc()) {場合、結合がある場合、どのようにテーブルをループできますか?それは連想配列ではありませんか?

3)問題は、タグの選択肢をそのままエコーアウトしていることです。ユーザーがリンクをクリックしたら、別のリンクをクリックして2番目のタグを割り当てることができるようにするにはどうすればよいでしょうか。

ここに画像の説明を入力してください

function getTags() {
include 'dbconnect.php';
global $site;

$tag = $mysqli->query("SELECT tagid, tagname FROM tags");   
//$tag = $mysqli->query("SELECT * FROM comics c INNER JOIN comictags ct ON (c.comicID = ct.comicID) WHERE ct.tag_id IN (1, 2, 3) GROUP BY c.comic_id");

mysqli_close($mysqli);

while ($row = $tag->fetch_assoc()) {        
    echo "<a href='?action=homepage&site=" . $site . "&tag=" . $row['tagid'] . "&tagname=" . $row['tagname'] . "'/>" . $row['tagname'] . "</a><br />";
  }

}
4

2 に答える 2

6

別のテーブルを追加するだけです。次に、3つあります。1つはタグ用、1つはコミック用、もう1つは関係用です。多対多の関係を適切に格納するには、この間接テーブルが必要です。これにより、各コミックに0個以上のタグを付けることができます(その逆も可能です)。

于 2013-02-13T14:44:41.467 に答える
2

これは、多対多の関係で実現できます。多対多の関係では、次のようなリレーショナル結合テーブルを使用します。

+---------------+---------------+
|   comic_id    |     tag_id    |
+---------------+---------------+
|       1       |        2      |
+---------------+---------------+
|       1       |        3      |
+---------------+---------------+
|       1       |        4      |
+---------------+---------------+

さて、あなたのクエリでは:

SELECT * FROM comics c INNER JOIN comic_tags ct ON (c.comic_id = ct.comic_id) WHERE ct.tag_id IN (1, 2, 3) GROUP BY c.comic_id

ここで、1、2、3は、ユーザーが表示したいタグを選択したものです。

于 2013-02-13T14:46:02.243 に答える