1

現在、すべてのユーザーと、そのユーザーが特定のファイルをダウンロードしたかどうかを示す HTML テーブルを作成しようとしています。

テーブル

ユーザー向けの 1 つ:

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;

ファイル用の 1 つ:

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 に答える