• 締切済み

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

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

  • 番号を付けたい

    プログラム初心者です phpとmysqlで簡単な掲示板を作りました カラムは sure、title、text、time、name selectで同じスレ名をselectします それで取得できたのがこんなかんじになります スレ名(sure) タイトル(title) テキスト(text) 書き込まれた時間(time) 書き込んだ人の名前(name) タイトル(title) テキスト(text) 書き込まれた時間(time) 書き込んだ人の名前(name) このレス一覧に番号を振る方法を教えてください こんな感じにしたいです NO2 タイトル(title) テキスト(text) 書き込まれた時間(time) 書き込んだ人の名前(name) NO1 タイトル(title) テキスト(text) 書き込まれた時間(time) 書き込んだ人の名前(name) よろしくお願いします

    • ベストアンサー
    • MySQL
  • Mysqlで複数テーブルの参照

    Mysqlで複数テーブルの参照 お世話になります。Mysqlについて質問させてください。 現在、それぞれnameとdateとflagの3フィールドをもつテーブルが、2つあります。 もともと別の用途で準備したものなのですが、 2つのテーブルのflagを参照して、1のものだけdate順に並べることが出来るでしょうか? ■テーブル1 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  田辺 | 2010-10-01 | 2 -----------------------------  田所 | 2010-11-01 | 2 ----------------------------- ■テーブル2 -----------------------------  name |  date  |flag| -----------------------------  加藤 | 2010-10-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  織田 | 2010-12-01 | 2 -----------------------------  斎藤 | 2010-01-01 | 2 ----------------------------- ■求める結果 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  加藤 | 2010-10-01 | 1 ----------------------------- 具体的なSQL文でなくとも構いません。参考になるような情報、サイトをご存じでしたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 複数のテーブルから値を取得したい

    とあるデータベース(mysql)に以下の2つのテーブルがあります。(【テーブル名】カラム名となっています) 【ブログ管理テーブル】 ブログID ブログカテゴリ ブログサイト名 ブログサイトURL  【記事管理テーブル】 記事タイトル 記事URL 記事フィード この2つのテーブルから次のような値を取り出したいと思っています。 ブログカテゴリ 記事タイトル 記事URL 記事フィード 複数のテーブルから値を取り出すには、テーブル同士を結合しないといけないということが分かり結合させてみたのですが、なぜか取り出すことができません・・・しかも、記事が重複して表示されてしまう・・・ 一体どのようなプログラムが必要でしょうか? 以上よろしくお願いします。

  • 複数テーブルへの更新、挿入について

    複数テーブルへの更新、挿入について教えてください。 現在2つのテーブルがあり、それぞれのテーブルに対して更新処理をかけています。 その処理を一回のSQLで更新できないものかと考えています。 以下のような二つのテーブルに対して一度にIntoできるものなのでしょうか。 よろしくお願いします。 --Teble1-- No Name Post ID 1 aaa bbb 1 2 aaa bbb 2 3 aaa bbb 3 --Teble2-- NO ID Memo 1 1 ccc 2 1 ccc 3 1 ccc 2 2 ccc 3 2 ccc

  • mysql3.23でテンポラリテーブルの使い方

    mysql3.23で、以下のようなテーブルでリスト形式の番号を、対応する他のテーブルのデータにマッチさせて代入する方法を教えてください。 [テーブル1] 'id' | 'type' 1 | 1,2 2 | 1,3,5 3 | 2,4 [テーブル2] 'id' | 'name' 1 | red 2 | blue 3 | yerrow 4 | green 5 | pink [このように出力したい] 'a.id' | 'b.name' 1 | red,blue 2 | red,yerrow,pink 3 | blue,green サブクエリなど使えばできるのだと思いますが、 ずっとmysql3.23なので、今まではプログラム側でループさせて出力していましたが、 今回テンポラリーテーブルに挑戦しようと思ったので、テンポラリーテーブルを使って取得する方法があれば、ぜひやり方を教えてください。 お願いします。

  • 複数のテーブルから登録順にデータ取得

    複数のテーブルから登録順にデータ取得なんてことできるのでしょうか? table_A A_id int A_time timestamp A_title text table_B B_id int B_time timestamp B_title text とtable_A table_Bにデータが存在するときに AB関係なく A_titleもしくはB_title を登録順のA_timeもしくはB_time 順に10個とかSQL一発でかけるのでしょうか? そもそもこのような作りにするな!ということでしょうが・・・

  • phpの掲示板でレスがあったスレッドを上にしたい

    phpとMySQLでスレッド掲示板を作っています。 掲示板の機能に「レスがあったスレッドを一番上にする」というのを実現したいのですが、どのような仕組み(考え方)をしたらいいのか分かりません。 MySQLには「スレッド用のテーブル」と「レス用のテーブル」がありますが、どのような連携をしたらいいのか・・・ 参考になるサイトなどありましたらよろしくお願いします。

    • ベストアンサー
    • PHP
  • テーブル結合方法について

    MySQL5.1で、Table a ,Table b から、Table cのように取り出したいのですが、 SQLでSELECTする方法がわかりません。 Table b優先だけど、Table aにしかデータがない場合もあるといった感じです。 Table a No  Name 1 加藤 2 佐藤 3 田中 Table b No Name 2 佐藤先輩 4 田辺先輩 Table c No Name 1 加藤 2 佐藤先輩 3 田中 4 田辺先輩 どうか、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 複数テーブルからのMAX内容の取得

    OracleのSQLに関する質問です 複数のテーブルから最大値を取得したいのですが Aテーブル 商品NO 更新日  更新時間 AAAAAA 20080101 010000 BBBBBB 20080201 020000 CCCCCC 20080131 030000 Bテーブル 商品NO 更新日  更新時間 XXXXXX 20070101 040000 YYYYYY 20070201 050000 ZZZZZZ 20080201 010000 上記2テーブルから更新日、更新時間が最大のデータを取得する方法を教えてください、商品NO等の他の項目を取得する必要はありません 上記のサンプルではAテーブルの'20080201'、'020000'が取得できる方法となります 以上 初歩的な内容ですがよろしくお願いいたします

  • サブクエリなしで2つのテーブルを集計する方法

    テーブルA id|cnt|name 1 2 田中さん 2 5 鈴木さん テーブルB id|cnt|name 1 4 田中さん 2 4 鈴木さん サブクエリを使用せず、上記2つのテーブルを集計し、 下記のように出力できるSQLはありますでしょうか? ■期待する総合ランキング結果 id|cnt|name 2 9 鈴木さん 1 4 田中さん P.S まだまだ、安価なレンタルサーバはMySQLは4.0が多く苦労します・・

    • ベストアンサー
    • MySQL