0
我正在建立一個網站,允許用戶上傳他們製作的電視節目的海報。其他用戶可以將自己添加到海報中,如果他們參與了製作,他們的名字也會列在海報下方。跨三個表的Mysql查詢?
我在編寫mysql查詢時會遇到問題,這將允許我列出所有上傳的海報,但也列出了自己列爲參與生產的任何用戶。我做了這個sql fiddle,可能有幫助。當前查詢顯示所有上傳的海報,但不包括那些已將自己添加到海報中的海報。有任何想法嗎?
查詢
SELECT tbl_uploads.file_name, tbl_users.user_id, tbl_users.user_name, tbl_collab.collab_userid, tbl_collab.collab_username
FROM tbl_uploads
left join tbl_collab on tbl_collab.file_name = tbl_uploads.file_name
left join tbl_users on tbl_uploads.user_id = tbl_users.user_id
group by tbl_uploads.file_name
的表格
CREATE TABLE IF NOT EXISTS `tbl_users` (
`user_id` int(11) NOT NULL,
`user_name` varchar(25) NOT NULL,
`user_email` varchar(60) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
INSERT INTO `tbl_users` (`user_id`, `user_name`,`user_email`) VALUES
(2, 'julian', '[email protected]'),
(3, 'bob', '[email protected]'),
(4, 'sue', '[email protected]');
CREATE TABLE IF NOT EXISTS `tbl_uploads` (
`id` int(10) NOT NULL,
`file_name` varchar(100) NOT NULL,
`user_id` int(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;
INSERT INTO `tbl_uploads` (`id`, `file_name`, `user_id`) VALUES
('7', 'Julians Picture','2'),
('13', 'Julians 2nd picture','2'),
('14', 'Bobs Picture','3'),
('15', 'Another Picture','3');
CREATE TABLE IF NOT EXISTS `tbl_collab` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`collab_username` varchar(255) NOT NULL,
`file_name` varchar(255) NOT NULL,
`collab_userid` varchar(255) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
INSERT INTO `tbl_collab` (`id`,`file_name`,`collab_userid`, `user_id`,`collab_username`) VALUES ('1','Bobs Picture','4','4','Sue'), ('2','Another Picture','3','3','Bob')
,('3','Bobs Picture','2','2','Julian');
您想查看所有'collab'條目,但是您通過上傳對結果進行分組。不幸的是,MySQL足夠寬容,不會拋出錯誤,但通過分組,您將省略除第一次上載以外的所有內容(我不確定它是否是真正的第一個或僅僅是第一個)。只需刪除「GROUP BY」一行,你應該沒問題。看看本作更多:https://blog.jooq.org/2012/08/05/mysql-bad-idea-384/ – hsan
我仍然無法弄清楚如何正確地權的SQL那並不是查詢儘管遵循你的建議,但仍然會產生重複。 – JulianJ
重複是什麼意思?當然,如果在協作表中有多個條目,那麼同樣的'file_name'會出現多次。但這正是你所要求的,以獲得所有合作者。請更新您的問題與預期的輸出,使其更清晰你正在尋找。 – hsan