跨三个表的Mysql查询?

时间:2016-07-19 21:18:15

标签: mysql

我正在建立一个网站,允许用户上传他们制作的电视作品的海报。如果他们参与制作,其他用户可以将自己添加到海报中,他们的名字也会列在海报下面。

我在编写mysql查询时遇到问题,该查询允许我列出所有上传的海报,但也列出了自己列为参与制作的任何用户。我做了这个sql fiddle可能有所帮助。当前查询显示所有上传的海报,但不显示已将自己添加到海报的海报。有什么想法吗?

查询

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', 'julian@email.com'),
(3, 'bob', 'bob@email.com'),
(4, 'sue', 'sue@email.com');

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' );

表格

zip(s,s.index)

1 个答案:

答案 0 :(得分:0)

这就是我想要的。 GROUP_CONCAT完成了这个伎俩

SELECT up.file_name, GROUP_CONCAT(c.collab_username)
FROM tbl_uploads up
LEFT JOIN tbl_users p ON up.user_id = p.user_id
LEFT JOIN tbl_collab c ON up.file_name = c.file_name
GROUP BY up.file_name