From ken-tanaka @ genaris.co.jp Wed Jun 25 01:36:20 2008 From: ken-tanaka @ genaris.co.jp (=?ISO-2022-JP?B?GyRCRURDZiEhN3IwbE86GyhC?=) Date: Wed, 25 Jun 2008 17:36:20 +0900 Subject: [Tokyo-pm] =?iso-2022-jp?b?REJJeDo6Q2xhc3MbJEIkSyREJCQkRjxBGyhC?= =?iso-2022-jp?b?GyRCTGQkNSQ7JEYkLyRAJDUkJBsoQg==?= Message-ID: <48620384.8010405@genaris.co.jp> メンバーのみなさま こんにちわ、初めて質問させていただきます。 田中健一郎と申します。 DBIx::Classを使用し、データベース内(postgreSQL)のデータを操作する処理に ついて質問させてください。 現在、複数のテーブルをjoinを使用しつなげていって、あるカラムのデータを抽 出し、その総件数を得る というSQLをDBIx::Classを使用し、処理したいと考えております。 例としまして、5人以上の大学院生が参加しているプロジェクトを指揮している 教授を求めるとき、 プログラムの中で、SQLの部分だけ書くと、 my @col=map("me.".$_,$sch->class('Professors')->columns); my $hrC={ select=>'me.prof_ssn', join=>{'work_ins'=>{'pid'=>{'work_projs'=>'grad_ssn'}}}, having=>{'count(work_projs.grad_ssn)'=>{'>=',5}}, group_by=>['me.prof_ssn'], }; となり、結果は、 486512566 248965255 090873519 141582651 というようになり、該当する教授のIDが表示されます。 ちなみに、SQL文に書くと、 SELECT me.prof_ssn FROM professors me LEFT JOIN work_in work_ins ON ( work_ins.prof_ssn = me.prof_ssn ) JOIN project pid ON ( pid.pid = work_ins.pid ) LEFT JOIN work_proj work_projs ON ( work_projs.pid = pid.pid ) LEFT JOIN graduates grad_ssn ON ( grad_ssn.grad_ssn = work_projs.grad_ssn ) GROUP BY me.prof_ssn HAVING ( count(work_projs.grad_ssn) >= 5 ); なり、表示させると、 prof_ssn ------------ 486512566 248965255 090873519 141582651 (4 rows) なります。ちなみに、work_inテーブルはprofessorsテーブルとprojectテーブル の間のrelationテーブルです。 work_projテーブルはprojectテーブルと graduatesテーブルの間のrelationテーブルです。 しかし、該当する教授の総数(今で言うと4件)を求めようと、"count"を使用 したら、エラーが出たり、わけのわからない数字が表示されたりします。たとえ ば、この場合ですと、13という数字が出ます。 いろいろ検証してみたのですが、どうもhavingを使用しているのが原因だとわ かったのですが、 havingはどうしても使用したいと考えております。どうしても総数も求めたいの ですが、どうしていいのか分からず、途方に暮れています。これはバグなので しょうか?そういう仕様なのでしょうか? もし、これを回避する何かいい案がありましたら教えていただけないでしょうか? またご表示された時の数字は一体何を表わしているのか、ご存知でしたら教えて いただけないでしょうか? 長くなりまして、申し訳ございませんが、よろしくお願いいたします。 From okabek @ beige.ocn.ne.jp Wed Jun 25 20:52:00 2008 From: okabek @ beige.ocn.ne.jp (Keiichi Okabe) Date: Thu, 26 Jun 2008 12:52:00 +0900 Subject: [Tokyo-pm] =?iso-2022-jp?b?REJJeDo6Q2xhc3MbJEIkSyREJCQkRjxBGyhC?= =?iso-2022-jp?b?GyRCTGQkNSQ7JEYkLyRAJDUkJBsoQg==?= In-Reply-To: <48620384.8010405@genaris.co.jp> References: <48620384.8010405@genaris.co.jp> Message-ID: <3e0a22940806252052n11afebbajce09d3e96994cc0b@mail.gmail.com> 田中さま,岡部といいます tokyo-pm の mlにはじかれたからアドレス変えてもう一度 2008/6/25 田中 健一郎 : > DBIx::Classを使用し、データベース内(postgreSQL)のデータを > 操作する処理について質問させてください。 僕がDB系苦手ってのもありますが,Tokyo.pmは 閑古鳥が鳴いてるのでshibuya.pmで質問した方が レスポンスよいです. http://shibuya.pm.org/blosxom/common/mailinglist.html http://groups.google.co.jp/group/shibuya-pm?hl-ja もしくはircで聞いてみると早いと思います. ルームは #shibuya.pm で,サーバは irc.freenode.net です よろしくお願いいたします. --- okabe