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

时间:2010-05-15 00:15:50

标签: php sql tagging

我正在处理图像共享网站,并希望为图像实现标记。

我已阅读问题#20856#2504150

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

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

此表为例:

Table: Image
Columns: ItemID, Title, Tags

Table: Tag
Columns: TagID, Name

图片表中的标记列会从标记表中包含多个 tagID 的字符串破折号( - )。

例如:

-65-25-105- 

使用 TagID 65,25和105链接图像。

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

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

因此,如果我使用此方法进行标记,

这有多有效?

通过LIKE%-65-%查询是一个缓慢的过程吗?

将来我可能面临哪些问题?

1 个答案:

答案 0 :(得分:4)

你需要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表解决方案。一旦它“点击”你就会感谢我。

相关问题