它是一个智能标签库图像搜索系统。用户在这样的表中添加带有适当标签的图像:
image (id, title, ...)
tag (id, title) /* It doesn't matter who has created the tag*/
imagetag (image_id, tag_id) /* One image may have multiple tags */
用户查看图像并且来自 *这些图像的标签*的访问记录在usertagview表中。(请注意,我INSERT ON DUPLICATE UPDATE为此目的使用了查询。)
usertagview (user_id, tag_id, view_count)
现在请考虑一些带有以下标签的图像:
river,day(这是一张在阳光明媚的日子里显示河流的图片)river,night(午夜月光下的那条河)tree,daytree,nightflower,dayflower,night
用户搜索标签river并显示任何带有标签river的图像:在这种情况下,将显示第一张图像(由river day标记)和第二张图像(由river night标记)。用户查看第二张图像(由river和标记night)并查看它记录在表中usertagview。
然后用户尝试重新搜索标签tree并查看tree night图像。
我希望如果用户搜索flower,flower night优先于flower day. 我的意思是flower night应该来之前flower day。换句话说,我想要一个查询,列出flower根据用户以前的视图标记的图像。(首先,接下来flower night是 OTHERflower)。
我的查询失败:
SELECT
DISTINCT (image.id) AS image_id,
image.title AS image_title,
SUM(usertagview.view_count) AS SUM_of_all_tag_views_for_each_image
FROM (image)
JOIN imagetag ON imagetag.image_id = image.id
**LEFT JOIN** usertagview ON
usertagview.tag_id = imagetag.tag_id
AND usertagview.user_id = {$user_id_from_php}
WHERE
imagetag.tag_id IN ( {impolde(',', $array_of_id_of_tags_that_the_user_has_entered)} )
AND
usertagview.tag_id IN
(SELECT tag_id FROM imagetag WHERE userimagetag.image_id = image.id)
ORDER BY SUM_of_all_tag_views_for_each_image DESC
问题
是**LEFT JOIN**我的查询中的 与正常的INNER JOIN. 他们都有相同的结果。即使我使用RIGHT JOIN它也没有区别。