如何显示相关(建议)关键字?

时间:2014-01-13 08:11:44

标签: sql sqlite search

我们通过为图像分配关键字(标签)来编制图像编目程序。

图片包含以下关键字“John”,“Jane”,“Portrait”。

另一张图片包含以下关键字“John”,“Jane”,“Wedding”。

当用户尝试对下一张图片进行编目并添加“John”关键字时,我们希望在“建议”区域中显示关键字“Jane”。

我们如何根据最可能的组合提取(使用SQL)建议的关键字?

编辑开始:

除了'John'等待上面的'Jane'关键字示例之外,我认为更理论的表述是我们希望找到与已经指定的'y'关键字一起找到的顶级'x'关键字分配过去的图像

:编辑结束

请注意,图片可以分配更多关键字,在“建议”区域中最好有更多建议。

相关表名为TagsTree,它具有以下创建DDL:

CREATE TABLE TagsTree(ImageID INTEGER NOT NULL, TagID INTEGER NOT NULL, UNIQUE (ImageID, TagID))

...其中ImageID是照片实体的FK,TagID是对关键字实体的FK引用。

此外,非常感谢有关架构等的任何其他提示。

PS:数据库引擎是SQLite3,如果重要的话。

1 个答案:

答案 0 :(得分:1)

我认为它可能类似于以下内容。例如,我们会找到TagId=$SearchedTagID$的建议。首先,我们应该选择所有TagID ImageId$SearchedTagID$,然后按TagId分组,然后按每个TagId的出现次数对结果集进行排序。您也可以将结果限制为某个值(在此示例中为5个常见建议(LIMIT 5))。

SELECT TagID,
       COUNT(*) as CommonCount
FROM TagsTree
WHERE ImageID IN (SELECT ImageID FROM TagsTree WHERE TagID = $SearchedTagID$)
      AND TagID <> $SearchedTagID$
GROUP BY TagID
ORDER BY CommonCount DESC
LIMIT 5