目前我正在尝试创建一个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 |
+----------+---------------+-------------+
有人能帮帮我吗?还是指出我正确的方向?
答案 0 :(得分: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