PHP:标记系统 JOIN 语句

标签 php mysql

我已经在我的漫画网站上实现了一个 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;

enter image description here

这样做的问题是,每次我想向漫画 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/

相关文章:

php - 在 cakephp 3 中创建适当的关联

php - 如何使用 date() 回显 future 的一天?

mysql - 将选择结果添加到另一个选择并创建一个 json 键

php - 允许用户在 PHP 中上传个人资料图片

mysql - 为mysql中缺失的行选择一个默认值

php - 保护我的网站内容不被通过 cURL 下载

php - 是否有任何用于 PHP 的开源文本分析库?

php - 在 Wordpress 上将缩略图裁剪为中等大小的精确尺寸

php - MySQL:如果定义的行相同,则不插入新行

php - 如何更新mySQL表中单元格值大于n的行?