我的SQL結構:多GROUP BY和在MySQL COUNT
CREATE TABLE collection (
id int(11) NOT NULL AUTO_INCREMENT,
user_id int(11) DEFAULT NULL,
`name` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (id),
KEY user_id (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE collection_link (
id bigint(20) NOT NULL AUTO_INCREMENT,
collection_id int(11) DEFAULT NULL,
configitem_id bigint(20) DEFAULT NULL,
PRIMARY KEY (id),
KEY IDX_7CDBB51F514956FD (collection_id),
KEY IDX_7CDBB51F9D3DD91F (configitem_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE configitem (
id bigint(20) NOT NULL,
PRIMARY KEY (id),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE user_account (
id int(11) NOT NULL AUTO_INCREMENT,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE collection
ADD CONSTRAINT FK_FC4D6532A76ED395 FOREIGN KEY (user_id) REFERENCES user_account (id),
ALTER TABLE collection_link
ADD CONSTRAINT FK_7CDBB51F514956FD FOREIGN KEY (collection_id) REFERENCES collection (id),
ADD CONSTRAINT FK_7CDBB51F9D3DD91F FOREIGN KEY (configitem_id) REFERENCES configitem (id);
其次,USER_ACCOUNT可以在收藏添加許多configitems,也可以在集合中添加相同的項目,因爲他想要的。因此,我需要找到集合中添加的頂級配置項,並避免用戶在其集合中添加重複項。也就是說,如果一個用戶在一個集合中有5個相同的配置,則只能計算一個......這就是我的問題。
隨着指出:
SELECT ID,SUM(NUM)FROM(SELECT 作爲l.configitem_id ID,COUNT(DISTINCT l.configitem_id)爲num FROM COLLECTION_LINK L左側加入收藏c9_ ON l.collection_id = c9_.id LEFT JOIN user_account u2_ ON c9_.user_id = u2_.id WHERE l.configitem_id = 1121 GROUP BY u2_.id,l.configitem_id )as cmpt;
我可以收到configitem 1121的確切計數,但如何應用於所有?
因爲我所有的測試失敗......
這工作,並採取前25又說:
SELECT DISTINCT c2_.id AS id_0, count(c1_.id) AS sclr_1
FROM collection_link c1_
LEFT JOIN configitem c2_ ON c1_.configitem_id = c2_.id
LEFT JOIN collection c8_ ON c1_.collection_id = c8_.id
LEFT JOIN user_account u9_ ON c8_.user_id = u9_.id
GROUP BY c2_.id
ORDER BY sclr_1 DESC LIMIT 25;
但需要重複。
請編輯您的帖子並添加表定義的文本,而不是圖片。 – jpw
同時發佈您的工作查詢 –
的結果以完成定義。 – Aize