0

コミックサイトにSOスタイルのタグ付けシステムを実装しました。

各コミックには、1つまたは複数のタグを付けることができます。

私が現在設定している方法は次のとおりです。コミックテーブル、タグテーブル、およびリレーショナルコミックタグテーブルがあります。クエリは、一致するコミックIDとタグIDがあるかどうかを確認します...

$sql = 
 "SELECT c.*, t.* 
 FROM comics c 
 INNER JOIN comictags ct ON (c.id = ct.comicID)
 INNER JOIN tags t ON (t.tagid = ct.tagID)
 WHERE ct.tagID IN ('" . implode(', ', $_SESSION['tagids']). "')
". $catquery ." " . $order;

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

これに伴う問題は、コミックIDに新しいタグを追加するたびに、コミックタグテーブルに新しいエントリを追加する必要があることです。

このスキーマをさらに持つことは可能ですか?

comicid_1: tagid_1, tagid_2, tagid_3, etc...

つまり、コミックIDごとに1つのエントリを作成し、tagid関連付けたいタグごとにフィールドにカンマ区切りのタグIDを追加します。

ありがとう!

4

2 に答える 2

2

あなたが現在行っている方法はまったく問題ありません。あなたがしようとしていることはそうではありません。これは第 1 正規形に違反しています。各属性には原子値のみを含めることができます。

もちろん可能です。たとえば、tagid 列に文字列型を使用します。しかし、これは多くのクエリを複雑にし、おそらくパフォーマンスが良くありません。

于 2013-03-05T17:59:35.277 に答える
1

そのような単純なSQL式は知りません:

INSERT INTO ComicsTags VALUES (1, 10), (1,20), (1,30);

スクリプト言語レベルの場合、そのテーブルのモデルのメソッドを記述して、それを少し簡単にすることができます。

$comicsTags = new ComicsTags();
$tags = array(10, 20,30);
$comicsTags->add(1, $tags);
于 2013-03-05T17:59:22.147 に答える