以下是一些背景信息。我有三個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