以下是一些背景信息。我有三个MySQL表(都是InnoDB)。第一个表格用于存储图像记录。第二个表用于存储标签(至标签带有.OMG的图像)。第三个表格用于存储图像和标签之间的关系。 YIPPEE。这是表格的结构。有关外键数据库的MySQL查询问题
CREATE TABLE `images` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`image` varchar(32) NOT NULL,
`type` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
CREATE TABLE `tags` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`tag` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
CREATE TABLE `images_to_tags` (
`image_id` int(8) unsigned NOT NULL,
`tag_id` int(8) unsigned NOT NULL,
PRIMARY KEY (`image_id`,`tag_id`),
KEY `tag_id` (`tag_id`),
CONSTRAINT `images_to_tags_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `images_to_tags_ibfk_1` FOREIGN KEY (`image_id`) REFERENCES `images` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
在图像数据库中的类型字段是 “图像/ GIF”, “图像/ PNG”,或 “图像/ JPEG”。
而你有它。所以我的桌子上充满了四分之一张图片,10,000个标签和一个图片标签关系度量标准。
1)我需要能够计算出有多少图片有标签。目前我这样做与以下查询:
SELECT COUNT(DISTINCT image_id)
FROM images_to_tags
这是最有效的方式来做到这一点?它似乎有点迂回。这是唯一能够达到这个目的的合理查询吗?
2)对于每个类型的图片,我想找出标有多少图片。所以说约5000总图像有标签,我怎么知道有多少5,000这些标记的图像是类型“image/png”。这对我不起作用:
SELECT COUNT(id), type
FROM images,
images_to_tags
WHERE images.id = images_to_tags.image_id
@mecablaze:在将您的评论发送给Aaron W后,我修改了第二个查询。 – RedFilter 2009-09-18 04:54:07
第一个查询返回每个tag_id出现次数的列表。 第二个查询与其他评论的功能相同(http://stackoverflow.com/questions/1442576/mysql-query-questions-with-a-foreign-key-database/1442619#1442619) – 2009-09-18 04:57:38
啊我的不好。第二个完美的作品。我一定会研究'in'语法。 – 2009-09-18 04:58:58