它是一个智能标签库图像搜索系统。用户在这样的表中添加带有适当标签的图像:
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
,day
tree
,night
flower
,day
flower
,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
它也没有区别。