1

目前我正在尝试创建一个显示所有用户以及该用户是否下载了某个文件的 HTML 表。

一个给用户:

CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(8) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(128) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

一个用于文件:

CREATE TABLE IF NOT EXISTS `files` (
  `file_id` int(8) NOT NULL AUTO_INCREMENT,
  `file_name` varchar(128) NOT NULL,
  PRIMARY KEY (`file_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

还有一个链接表来保存哪个用户下载了什么文件:

CREATE TABLE IF NOT EXISTS `downloads` (
  `download_id` int(8) NOT NULL AUTO_INCREMENT,
  `user_id` int(8) NOT NULL,
  `file_id` int(8) NOT NULL,
  PRIMARY KEY (`download_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

询问

当我选择 file_id 3 时,我想查看每个用户以及他们是否下载了文件。

SELECT `file_id`, `user_name`, IF(`file_id` = '3', 1, 0) as `downloaded`
FROM `users` 
NATURAL RIGHT JOIN `downloads`
WHERE `file_id` = '3'
GROUP BY `user_name`

结果

输出应该是这样的:

+----------+---------------+-------------+
| file_id  | user_name     | downloaded  |
+----------+---------------+-------------+
| 3        | John          | 1           |
| 3        | Peter         | 1           |
| 3        | Jack          | 0           |
| 3        | Michael       | 0           |
+----------+---------------+-------------+

有人可以帮我吗?或者指出我正确的方向?

测试区:http ://sqlfiddle.com/#!2/b5f81/4

4

1 回答 1

1

以下应该有效:

SELECT 3 file_id, user_name, IF(d.file_id = 3, 1, 0) downloaded 
FROM users u
LEFT JOIN downloads d ON d.user_id = u.user_id && d.file_id = 3
ORDER BY downloaded DESC
于 2013-11-14T19:18:07.380 回答