人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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はありませんでしょうか。
皆様よろしくお願い致します。

●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:name SNS SQL USER コメント
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● chuken_kenkou
●35ポイント

普通に考えれば、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/ダミー

◎質問者からの返答

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

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

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


mixi等で、

日記のタイトル(3)

日記のタイトル(2)

日記のタイトル(0)

日記のタイトル(4)

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

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


2 ● chuken_kenkou
●35ポイント

コメント数だけではなく、日記の内容などテーブル情報は全て取得できるような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/ダミーです

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ