php - 这种标记解决方案的效果如何?

标签 php sql tagging

我在图像共享网站上工作,想要为图像实现标记。

我已阅读问题 #20856#2504150

我对上述问题的处理方式几乎没有任何顾虑。首先,将图像链接到标签看起来很容易。然而通过标签关系获取图像并不那么容易。这并不容易,因为您必须从一个表中获取图像到标签的关系,然后使用一堆 OR 语句(每个图像一个 OR)进行大查询。

在研究标记主题之前,我开始测试以下方法:

此表为例:

Table: Image
Columns: ItemID, Title, Tags

Table: Tag
Columns: TagID, Name

Image 表中的Tags 列从包含在Tag 表中的多个tagID 中获取一个字符串破折号 (-)。

例如:

-65-25-105- 

链接图像与 TagID 65,25 和 105。

使用这种方法,我发现通过标签获取图像更容易,因为我可以通过一个查询获取 TagID,并通过另一个简单的查询获取所有图像,例如:

SELECT * FROM Image WHERE Tags LIKE %-65-%

所以如果我使用这种方法进行标记,

效果如何?

按 LIKE %-65-% 查询是否是一个缓慢的过程?

我以后会遇到什么问题?

最佳答案

为此您需要 3 个表。

Table: Image
Columns: ImageId, ItemID, Title

Table: Image_Tag
Columns: ImageId, TagId

Table: Tag
Columns: TagID, Name

然后获取您将使用的标签的所有图像:

SELECT ImageId, Title 
FROM Image_Tag LEFT JOIN Image USING (ImageId)
WHERE TagId = $TagId

这是在关系数据库中处理多对多关系的典型方式。阅读有关 http://en.wikipedia.org/wiki/Database_normalization 的内容,您可能会受益匪浅

编辑:我看到这已经在您提到的其他问题中得到解决,所以我将进一步解释。我看到按照你的方式做的最大问题是你不能利用索引你的 id 列,这会降低你的查询效率。看起来更新起来也很笨拙。我强烈建议不要尝试那样做,至少尝试使用 3 表解决方案。一旦它为您“点击”,您就会感谢我。

关于php - 这种标记解决方案的效果如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838390/

相关文章:

mysql - SQL中使用SET计算百分比时出现错误 "operand should contain 1 column(s)"

c++ - OSX Mavericks 在 C 程序中获取文件的标签

SQL查询以查找具有最多指定标签的事物

插入语句中的 SQL 聚合

javascript - PHP 中的搜索不起作用

javascript - 使用 Javascript 在弹出窗口中显示页面

javascript - 如何用 PHP 用 %0D%0A 替换新行

sql - SQLite 3.7.4 中字段子集的全文搜索

Flask-SQLAlchemy 使用多个必需标签查询多对多标签

php - TinyMCE:经验、选择