代码之家  ›  专栏  ›  技术社区  ›  Pablo

这个标签解决方案有多有效?

  •  4
  • Pablo  · 技术社区  · 16 年前

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

    我读过一些问题 #20856 #2504150

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

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

    本表举例如下:

    Table: Image
    Columns: ItemID, Title, Tags
    
    Table: Tag
    Columns: TagID, Name
    

    这个 标签 图像 塔吉德 标签 用破折号(-)括起来的表格。

    -65-25-105- 
    

    标签编号

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

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

    所以如果我用这个方法做标记,

    这有多有效?

    以%-65%的速度进行查询是一个缓慢的过程吗?

    1 回复  |  直到 9 年前
        1
  •  4
  •   Syntax Error    16 年前

    你需要三张桌子。

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