MySQL5の質問です。


SNS風のシステムを連想してもらえるとありがたいです。
SNSの日記にはコメントが付けられます。
その日記に付けられたコメント数をSQLで取得したいです。
ただ、コメント数だけではなく、日記の内容などテーブル情報は全て取得できるようなSQLが欲しいです。


テーブル情報はこちら。カッコ内がフィールド名になります
テーブル diary(id,user_id)
テーブル user(id,name)
テーブル comment(id,diary_id)

これの紐付けは、diary.user_id = user.id と diary.id = comment.diary_id です
テーブル情報は単純にするために省略していますが、diaryテーブルであれば本文などのフィールドがあります。


何かスマートなSQLはありませんでしょうか。
皆様よろしくお願い致します。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2007/11/06 15:36:02
  • 終了:2007/11/13 17:41:58

回答(2件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542007/11/06 16:28:22

ポイント35pt

普通に考えれば、left joinしていけばいいと思います。

select *
 from `user` as u
  left join `diary` as d on u.id=d.user_id
  left join `comment` as c on d.id=c.diary_id

表示する列、order byなど、必要により変更してください。

http://q.hatena.ne.jp/ダミー

id:tokyosmash

早速の回答ありがとうございます。

質問文にも書きましたが「日記に付けられたコメント数」を求めるにはどうすればいいのでしょうか?

どこかにcountとGroup Byを使うのだと思いますが、その辺が複雑でうまくいっていないのです。


mixi等で、

日記のタイトル(3)

日記のタイトル(2)

日記のタイトル(0)

日記のタイトル(4)

といったように各日記につけられたコメント数を表示している例があります。

これがなかなか実現できないのです。

2007/11/06 16:45:50
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542007/11/06 17:00:45

ポイント35pt

コメント数だけではなく、日記の内容などテーブル情報は全て取得できるようなSQL

件数を求めるSQLと、いろいろな列の値を得るSQLは、1個にはできません。

件数を求める場合は、例えば以下のようなSQLになります。

select
  u.name,
  d.title,
  count(c.id) as コメント数
 from `user` as u
  left join `diary` as d on u.id=d.user_id
  left join `comment` as c on d.id=c.diary_id
  group by u.name,
           d.title    -- 日記のタイトル

http://q.hatena.ne.jp/ダミーです

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません