スキーマが跨る情報の取得

133 views
Skip to first unread message

ranbo...@gmail.com

unread,
Dec 13, 2018, 3:30:01 AM12/13/18
to fuelphp.jp
fuelphpでtest_db1,test_db2スキーマ内のテーブルtest_table1,test_table2を結合してデータを取得したいのですが、
fuelphpのexecuteがdb名を1つしか指定できないため、テーブル横断したデータ取得は出来ないのでしょうか?
テーブルの切替ではなく2つのスキーマから1度のsqlでデータ取得する方法があるか知りたいです。
test_db1,test_db2への接続ユーザーとパスワードはそれぞれ別になります

KOYAMA Tetsuji

unread,
Dec 13, 2018, 3:49:40 AM12/13/18
to fuelp...@googlegroups.com
小山です。

FuelPHP に限らず、一度の SQL で複数の DB インスタンスから情報を取ることは基本的にできません。

PostgreSQL の dblink、MySQL の federated エンジンなど特別な仕組みを DB 側に用意してやることで
可能になる場合もあります。

DB 接続を複数使って、アプリケーション側で結合処理を行うのが素直な解決策だだと思います。

On Thu, Dec 13, 2018 at 5:30 PM <ranbo...@gmail.com> wrote:
>
> fuelphpでtest_db1,test_db2スキーマ内のテーブルtest_table1,test_table2を結合してデータを取得したいのですが、
> fuelphpのexecuteがdb名を1つしか指定できないため、テーブル横断したデータ取得は出来ないのでしょうか?
> テーブルの切替ではなく2つのスキーマから1度のsqlでデータ取得する方法があるか知りたいです。
> test_db1,test_db2への接続ユーザーとパスワードはそれぞれ別になります
>
> --
> このメールは Google グループのグループ「fuelphp.jp」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには fuelphp_jp+...@googlegroups.com にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
小山哲志
koy...@hoge.org

ranbo...@gmail.com

unread,
Dec 13, 2018, 4:07:09 AM12/13/18
to fuelphp.jp
ありがとうございます。
>DB 接続を複数使って、アプリケーション側で結合処理を行うのが素直な解決策だだと思います。 
というのは例えば、下記のように2回実行してアプリケーションで結合するという認識であっていますでしょうか?
Model_Hoge::query()->connection('test_db1')->get();
Model_Hoge::query()->connection('test_db2')->get();
とすると先述どおり異なるスキーマのテーブルをjoinして取得するってことは出来ないんですね。

2018年12月13日木曜日 17時49分40秒 UTC+9 koyhoge:

kit.t

unread,
Dec 13, 2018, 5:07:34 AM12/13/18
to fuelphp.jp
SQL文として可能な事であればfuelphp上でも実現は可能であると思います。
MySQLで同一DBサーバー上の複数のデータベースに跨って取得する事は一応可能です。

今回の場合は以下の理由のため1つのクエリでは不可能だと思われます。

test_db1,test_db2への接続ユーザーとパスワードはそれぞれ別になります。

executeに1つしか指定できないのはdb名ではなくdb connectionですから、
接続したデータベース外のデータを取得できる場合はありますが、
二つのDBユーザーの権限が必要となる事はできないと思われます。
test_db1,test_db2の両方に対して権限があるDBユーザーならば前記の通り可能です。

ranbo...@gmail.com

unread,
Dec 17, 2018, 5:32:32 AM12/17/18
to fuelphp.jp
ありがとうございました。
内容理解しましたので権限のあるユーザーを用意する事にしました。

2018年12月13日木曜日 17時30分01秒 UTC+9 ranbo...@gmail.com:
Reply all
Reply to author
Forward
0 new messages