Mysql 如何在SQLite中按相关性排序?
我甚至不确定这个问题的正确表达方式。我有一个包含数千个图像ID的SQLite数据库。每个图像都标记了一组单词。这个想法是你在UI中选择一些单词,然后它会向你显示相应的图像。很简单 我的图像标签表如下所示Mysql 如何在SQLite中按相关性排序?,mysql,sql,sqlite,Mysql,Sql,Sqlite,我甚至不确定这个问题的正确表达方式。我有一个包含数千个图像ID的SQLite数据库。每个图像都标记了一组单词。这个想法是你在UI中选择一些单词,然后它会向你显示相应的图像。很简单 我的图像标签表如下所示 imageId | tags ____________________ 1 red 1 green 2 blue 2 yellow 3 r
imageId | tags
____________________
1 red
1 green
2 blue
2 yellow
3 red
3 yellow
etc...
目前,我正在使用一个简单的WHERE-IN来获取所有的图像ID,就像这样
SELECT imageId FROM tagsTable WHERE tags IN ('red','green','blue')
…但现在我需要根据相关性对得到的图像ID进行排序。例如,如果我要求输入“红色”和“黄色”,我想在结果中首先输入图像id 3,然后输入id 1和2
这似乎是一件很简单的事情,但我不明白
SELECT imageId
FROM tagsTable
WHERE tags IN ('red','yellow')
GROUP BY imageId
ORDER BY COUNT(*) DESC
将首先返回匹配最多的ImageID
将首先返回匹配项最多的ImageID。请注意,原始查询可以返回重复项。它可以吗?当我测试它时,我从未得到过任何重复的ID?对于您的示例数据,您的查询将返回两次
1
。-您需要在此处使用DISTINCT
。谢谢提醒!请注意,原始查询可以返回重复项。它可以吗?当我测试它时,我从未得到过任何重复的ID?对于您的示例数据,您的查询将返回两次1
。-您需要在此处使用DISTINCT
。谢谢提醒@AzzyDude-它将与DISTINCT一起工作-但是DISTINCT在这里没有任何效果,因为我们已经按照imageId
分组了-所以不会有任何重复项。但是,如果您想动态地构建查询,并有条件地添加最后两行,就可以了。但是您也可以使用按imageId分组,而不是使用独立的(效果相同),并在需要时添加最后一行。@AzzyDude-它可以使用独立的-但是独立的在这里没有效果,因为我们已经按imageId分类了-所以不会有任何重复。但是,如果您想动态地构建查询,并有条件地添加最后两行,就可以了。但是您也可以只使用groupbyimageid
而不是DISTINCT
(效果相同),并在需要时添加最后一行。