Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQLite中按相关性排序?_Mysql_Sql_Sqlite - Fatal编程技术网

Mysql 如何在SQLite中按相关性排序?

Mysql 如何在SQLite中按相关性排序?,mysql,sql,sqlite,Mysql,Sql,Sqlite,我甚至不确定这个问题的正确表达方式。我有一个包含数千个图像ID的SQLite数据库。每个图像都标记了一组单词。这个想法是你在UI中选择一些单词,然后它会向你显示相应的图像。很简单 我的图像标签表如下所示 imageId | tags ____________________ 1 red 1 green 2 blue 2 yellow 3 r

我甚至不确定这个问题的正确表达方式。我有一个包含数千个图像ID的SQLite数据库。每个图像都标记了一组单词。这个想法是你在UI中选择一些单词,然后它会向你显示相应的图像。很简单

我的图像标签表如下所示

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
(效果相同),并在需要时添加最后一行。