我在一个图像共享站点上工作,并希望为图像实现标记。

我已阅读问题 #20856#2504150

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

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

此表作为示例:

Table: Image
Columns: ItemID, Title, Tags

Table: Tag
Columns: TagID, Name

图像 表中的 标签 列从由破折号 (-) 括起来的 标签 表中获取具有多个 tagID 的字符串。

例如:
-65-25-105-

使用 标签 ID 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/

10-12 12:51
查看更多