我需要完成对4个表的查询
图像:ID
标记:id,name
tag images:image_id,tag_id(图像和标记的外键)
彩色图像:图像ID,十六进制,值(图像外键)
我想得到相似的图像,有共同的标签和颜色。图像应该至少有一个共同的标签,但顺序相似的颜色。
我已经编写了标签相似性查询,如下所示:

SELECT TagImages.imageId , count(*) AS q
FROM TagImages
Join colorImages ON colorImages.imageId = TagImages.imageId
WHERE TagImages.tagId IN (
    SELECT TagImages.tagId
    FROM TagImages
    WHERE TagImages.imageId=41
)
AND TagImages.imageId!=41
GROUP BY TagImages.imageId
ORDER BY q DESC

它工作得很好,但它需要添加颜色'顺序'排序图像与目标图像的颜色。ColorImages表有一个名为value的列,该列表示图像中该颜色的百分比,因此最好使用值最高的颜色对图像进行排序。

最佳答案

好吧,不看表结构和数据,我可以提出这一点,它应该工作,如果你把表结构与少量的数据脚本,以便我们可以发挥它,并能带来所需的结果。

SELECT TagImages.imageId , count(*) AS q, ColorImage.value
FROM TagImages
Join colorImages ON colorImages.imageId = TagImages.imageId
WHERE TagImages.imageId=41
GROUP BY TagImages.imageId, ColorImage.value
ORDER BY q DESC, ColorImage.value

08-24 22:59