• 締切済み

非常に複雑な複数テーブル間の問い合わせ

threadTable no/スレッドNo datetimes/スレッド更新時間 title/スレッドタイトル resTable no/レス通しNo resNo/このレスが同スレッドで何番目か(0始まりで、0だとスレッド作成時の記事) threadNo/対象スレッドNo name/記入者名 このようなテーブルを用いて threadTable.no|threadTabletitle|resTable.name(*1)|resTable.name(*2)|合計レス数|threadTable.time という結果をスレッド更新時間が新しい順に10件得たいです。 MySQLのバージョンは5.0.37ですが、 4でも動くようにサブクエリを使わない方法と合わせて教えていただけると助かります。 よろしくお願いします *1:resTable.resNo = 0 *2:resTable.resNoが最大

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

テンポラリは使えるのですよね? それならこんな感じでしょうか・・・ CREATE TEMPORARY TABLE r0 SELECT threadNo,max(resNo) AS resNo,COUNT(*) AS count FROM resTable WHERE resNo>0 GROUP BY threadNo; SELECT threadTable.no ,threadTable.title ,r1.name AS name1 ,COALESCE(r2.name,'') AS name2 ,COALESCE(count,0) AS count ,threadTable.datetimes FROM threadTable INNER JOIN resTable as r1 ON threadTable.no=r1.threadNo AND r1.resNo=0 LEFT JOIN r0 ON r0.threadNo=threadTable.no LEFT JOIN resTable as r2 ON r0.resNo=r2.resNo AND r0.threadNo=r2.threadNo ORDER BY datetimes DESC;

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

あいまいさをなくすため、テーブルの例と、結果の例を簡単に 挙げられませんか?

gogo724275
質問者

補足

●threadTable no|datetimes     |title 1|2007-01-01 01:00:00|タイトル1 2|2007-02-01 01:00:00|タイトル2 3|2007-03-01 01:00:00|タイトル3 ●resTable no|resNo|threadNo|name |datetimes 0| 0| 1|名前A|2007-01-01 01:00:00 1| 0| 2|名前B|2007-01-02 01:00:00 2| 0| 3|名前C|2007-01-03 01:00:00 3| 1| 2|名前D|2007-02-01 01:10:00 4| 1| 3|名前E|2007-02-01 01:00:00 5| 2| 3|名前F|2007-03-01 01:00:00 ●結果 threadTable.no|threadTabletitle|resTable.name(*1)|resTable.name(*2)|合計レス数|threadTable.time 3| タイトル3| 名前C|名前F | 2|2007-03-01 01:00:00 2| タイトル2| 名前B|名前D | 1|2007-02-01 01:00:00 1| タイトル1| 名前A| | 0|2007-01-01 01:00:00 resTableにdatetimesを追加しました。 ごちゃごちゃで見辛いかもしれませんがよろしくお願いします。

関連するQ&A