mysql:2436
From: (moeru) <<moeru@xxxxxxxxxx>>
Date: Fri, 01 Sep 2000 00:13:34 +0900
Subject: [mysql 02436] Re: GROUP BY で全部のレコードを表示させる方法
2000/08/31 07:23:46 +0900にとみたまさひろ <tommy@xxxxxxxxxx>さんに頂いた 「[mysql 02431] Re: GROUP BY で全部のレコードを表示させる方法」への返事です。 モエルです。 とみたさん、丁寧な解説ありがとうございます。 >> ただ、まだ一時テーブルを作成する目的・意義みたいなものが理解できていません。 >> 一時テーブルって、自己結合とどう違うのでしょうか? > >一時テーブルを使う利点は接続が切れたら勝手に消えてくれるという >ことだけです。 > create temporary table hoge (userid int not null, > price int not null, index(userid), index(price)); > insert into hoge select userid, max(price) from item > where itemid = '$itemid' group by userid; > select hoge.userid, hoge.price, quantity from hoge, item > where hoge.userid = item.userid and hoge.price = item.price > order by hoge.price desc; > >これでどうでしょう? userid 毎の最大 price を一旦一時テーブルに >保存しておいて、その price に一致する quantity を item から取り出す >ということをやってます。 このwhere hoge.userid = item.userid and hoge.price = item.price で、やってることが理解できました。 結局、max()などの制限で他のデータが正確に取り出せないような場合、 一時テーブルを作ってその他のデータを持ってくるってことですよね。 なんとなく自己結合でもいけちゃうような気がしますけど できなかったのは、ぼくの書き方の問題でしょうか(^^; マニュアルで CREATE TEMPORARY TABLE test TYPE=HEAP ってのを見つけました。 パフォーマンスの向上にも使われるんですね。 ぼくの場合は、しょっちゅう開くテーブルじゃないから メモリじゃなくてDISKのテンポラリーで十分かな。。 >ん〜、私はバグじゃないと思うんですけどね…。 いやぁ、とみたさんが回答されているので 動かないならバグと思うしかなかったです(^^; 今回いただいたSQLで希望どうりに動きました\(^o^)/ どうもありがとうございますm(__)m モエル
2425 2000-08-29 20:56 [<moeru@xxxxxxxxxx> ] GROUP BY で全部のレコードを表示させる方法 2426 2000-08-29 21:16 ┗[とみたまさひろ <tomm] 2427 2000-08-29 22:21 ┗[<moeru@xxxxxxxxxx> ] 2428 2000-08-29 23:40 ┗[とみたまさひろ <tomm] 2429 2000-08-30 00:17 ┣[<moeru@xxxxxxxxxx> ] 2430 2000-08-30 21:53 ┗[<moeru@xxxxxxxxxx> ] 2431 2000-08-31 07:23 ┗[とみたまさひろ <tomm] 2432 2000-08-31 18:19 ┣[Natsu Tanaka <natsug] はじめまして 2434 2000-08-31 23:33 ┃┣[<moeru@xxxxxxxxxx> ] 2435 2000-09-01 00:06 ┃┗[とみたまさひろ <tomm] 2443 2000-09-04 11:33 ┃ ┗[Natsu Tanaka <natsug] みなさんへ -> 2436 2000-09-01 00:13 ┗[<moeru@xxxxxxxxxx> ]