加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

必要有关MySQL子查询计数的辅佐

发布时间:2021-01-24 19:53:40 所属栏目:编程 来源:网络整理
导读:我碰着了本身的MySQL查询手艺限定,因此但愿一些SQL专家可以辅佐您办理这一题目.环境如下: 我有可以标志的图像.如您所料,它存储在三个表中: 图片 标签 Tag_map(将图像映射到标签) 我有一个SQL查询,该查询按照标签ID计较相干标签.该查询根基上搜查行使了其他

我碰着了本身的MySQL查询手艺限定,因此但愿一些SQL专家可以辅佐您办理这一题目.环境如下:

我有可以标志的图像.如您所料,它存储在三个表中:

>图片
>标签
> Tag_map(将图像映射到标签)

我有一个SQL查询,该查询按照标签ID计较相干标签.该查询根基上搜查行使了其他标签的图像.例:

Image1标志为“熊”
Image2别离标志为“熊”和“加拿大”

假如在查询中抛出“熊”(或其标志ID),它将返回“加拿大”.这很好.这是查询:

SELECT tag.name,tag.id,COUNT(tag_map.id) as cnt
FROM tag_map,tag
WHERE tag_map.tag_id = tag.id AND tag.id != '185' AND tag_map.image_id IN

    (SELECT tag_map.image_id FROM tag_map INNER JOIN tag ON tag_map.tag_id = tag.id WHERE tag.id = '185')

GROUP BY tag_map.id LIMIT 0,100

我僵持的部门是计数.对付返回的每个相干标签,我想知道该标签中有几多张图像.当前,纵然有譬喻3,它老是返回1.我试图计较全部导致沟通输出的差异列,以是我想我的设法有一个缺陷. 最佳谜底 您的代码无法正常事变,由于您只选择了“与选择的标签相干联的图像”,而没有选择“与与选择的标签相干联的图像相干联的标签”的图像(我但愿行使正确的递归深度:)).

您可以行使子选择执行此操纵:

SELECT tag.id,tag.name,COUNT(DISTINCT tag_map.image_id) as cnt
  FROM tag_map,tag
 WHERE tag_map.tag_id = tag.id
   AND tag.id != 185
   AND tag_map.tag_id IN (
     SELECT sub1.tag_id FROM tag_map AS sub1 WHERE sub1.image_id IN (
       SELECT sub2.image_id FROM tag_map AS sub2 WHERE sub2.tag_id = 185
     )
   )
GROUP BY tag.id,tag.name;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读