我已经在我的漫画网站上实现了一个 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 添加新标签时,它都会迫使我向 comictags 表添加一个新条目。
是否有可能有更多这样的架构:?
comicid_1:tagid_1、tagid_2、tagid_3 等...
意思是,我为每个漫画 ID 创建 1 个条目,并在 tagid
字段中为我想要关联的每个标签添加一个逗号分隔的标签 ID。
谢谢!
最佳答案
您目前的操作方式非常好。你打算做的不是。它违反了 first normal form : 每个属性只能包含原子值。
当然,这是可能的。例如,通过为 tagid 列使用字符串类型。但这会使很多查询变得复杂,并且可能不利于性能。
关于PHP:标记系统 JOIN 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230665/