2016-11-20 11 views
0

私は、教師が課題をアップロードできる場所に作成したソフトウェアに使用するMySQLデータベースを用意しています。ここでは、どの割り当てが配信のコメントが降順で出されているかの概要をリストしたいと思います。配送のコメントをMySQLに登録する必要があります

すべての割り当ては、module_idがPKであるmoduleというテーブルに格納されます。すべての配信は、delivery_idがPKで、user_idとmodule_idの両方がFKであるdeliveryというテーブルに格納されます。最後に、すべてのコメントが保存されるstudent_commentテーブルがあります。そのテーブルでは、Student_comment_idはPKで、delivery_idはFKです。私の説明がひどい場合、私はどのようにテーブルを作りましたか?明らかに多くのテーブルがありますが、私はそれらがこの質問と無関係であると思います。

create table module(
module_id int not null auto_increment, 
module_name varchar(50) not null, 
description varchar(1000), 
rights int, 
primary key(module_id) 
); 

create table delivery(
delivery_id int not null auto_increment, 
module_id int, 
users_id int, 
delivery_status int, 
date_delivered date, 
date_approved date, 
primary key(delivery_id), 
foreign key(module_id) references module(module_id), 
foreign key(users_id) references users(users_id) 
); 

create table student_comment(
student_comment_id int not null auto_increment primary key, 
s_content varchar(100), 
delivery_id int, 
foreign key(delivery_id) references delivery(delivery_id)); 

だからもう一度、私はモジュールは配達上で最も意見を持っている上で概要を一覧表示したいと私は降順でそれをソートしたいです。私はこれをしばらく試しましたが、実際にこれを行う方法を理解できません。どんな助けも本当にありがとう!

また、私はSQLで始まったばかりです。間違っていると思われるものがある場合や、大きな助けとなる情報源がある場合は、お気軽にコメントしてください。

答えて

1

集計クエリは、求めているものを生成します。 「どのモジュールが納品に最もコメントしているか」と言うと、それはすべての納品のコメント数を知りたいという意味に解釈されます。次のSQLはそれを生成するはずです。

select 
    m.module_id, 
    count(c.student_comment_id) as comment_count 
from 
    module as m 
    inner join delivery as d on d.module_id=m.module_id 
    inner join student_comment as c on c.delivery_id=d.delivery_id 
group by 
    m.module_id 
order by 
    count(c.student_comment_id) desc; 
+0

素晴らしい答えNIelsen。私はおそらくこれでnoobですが、私はあなたのコードを動作させるように見えませんでした..私はこれを取得:エラーコード:1054. 'フィールドリスト'で不明な列 'm.module'。私はここで何が欠けていますか?参考までに、MySQLワークベンチを使用します。 –

+0

また、具体的には、各モジュール(割り当て)にはx個の配信数があります。私は、これらのモジュール(割り当て)ごとにどれだけ多くのコメントがあるのか​​を数えたいと思います。 –

+0

「モジュール」列名を修正するために編集されました。 –

関連する問題