mysql:8295
From: Hiroyasu TOBA <Hiroyasu TOBA <toba@xxxxxxxxxx>>
Date: Sat, 18 Oct 2003 15:08:39 +0900
Subject: [mysql 08295] Re: SELECT JOIN した結果の PHP mysql 関数からの取り出しについて
こんにちは、鳥羽です。 古賀様、とみた様、早速のアドバイスありがとうございます。 とみたまさひろ wrote: >とみたです。 > > >API があるようなので、それを使って mysql_fetch_array() の代わりとなる >ような独自の関数を作ればよいのかも…。 > >mysql_fetch_row() で1レコードを取り出して、各フィールドについて >mysql_fetch_field() でテーブル名とフィールド名を求めて、"." で結合して >ハッシュのキーとする…という関数です。 > >私の怪しい PHP の知識で書くとこういう感じ…。 ># 試してません。たぶん、このままでは動かないと思います (^^; > > $row = mysql_fetch_array($result) > $hash = array() > for ($i=0; $i<count($row); $i++) { > $f = mysql_fetch_field($result, $i) > $k = $f->table + "." + $f->name > $hash[$k] = $row[$i] > } > > 解決のヒント、どうもありがとうございます。 早速、アドバイスどおり試してみました。 こんな感じでうまくいきました。 $flag = 0; // レコード読み込みループ while ($row =@mysql_fetch_array($result,MYSQL_ASSOC)) { // ハッシング?テーブル作成は 1回だけ if( $flag == 0 ) { $hash = array(); $v = array_values($row); for( $i=0; $i<count($row); $i++ ) { $f = mysql_fetch_field($result,$i); $k = $f->table . "." . $f->name; $hash[$k] = $i; } $flag = 1; } // 1要素配列がかえってくるので苦肉の策でarray_pop() $table1_elm1 = array_pop( array_slice($row,$hash["Table1.Element1"],1)) ; $table1_elm1 = array_pop( array_slice($row,$hash["Table5.Element6"],1)); . . . とかです。 テーブル作成の部分がごちゃごちゃするので、関数化しようかと思います。 アクセスに行く部分は、特にきにならないので、そのまま、、、。 直接、配列内の要素を順番指定でアクセスできると、効率的なのですが、、、 yuji koga wrote: >お世話になります。古賀です。 > > >異なるテーブル間のリレーションならば、 >とみた様の解決策が良いと思います。 > >#とりあえず、異なるテーブル間で同じフィールド名を使わない、 >#というのが一番の解決策なのかも知れません。 > > なるほど、確かに、重ならないフィールド名ならば、素のままでアクセス できますね。(知らなかった、、、。) とみたさん、古賀さん、どうもありがとうございました。 それでは、失礼します。 ---- 鳥羽 弘康
8283 2003-10-17 17:31 [Hiroyasu TOBA <toba@] SELECT JOIN した結果の PHP mysql 関数からの取り出しについて 8284 2003-10-17 17:54 ┗[yuji koga <koga-y@xx] 8286 2003-10-17 18:39 ┗[とみたまさひろ <tomm] 8288 2003-10-17 19:07 ┣[yuji koga <koga-y@xx] 8308 2003-10-21 09:14 ┃┗[とみたまさひろ <tomm] -> 8295 2003-10-18 15:08 ┗[Hiroyasu TOBA <toba@] 8296 2003-10-18 15:20 ┗[Hiroyasu TOBA <toba@]