質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

3回答

2292閲覧

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

enigumalu

総合スコア192

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2018/12/13 07:25

編集2018/12/13 07:51

fuelphpでtest_db1,test_db2スキーマ内のテーブルtest_table1,test_table2を結合してデータを取得したいのですが、
fuelphpのexecuteがdb名を1つしか指定できないため、テーブル横断したデータ取得は出来ないのでしょうか?
テーブルの切替ではなく2つのスキーマから1度のsqlでデータ取得する方法があるか知りたいです。

$db_query = DB::select(); $db_query->from('test_table1'); $db_query->where('_id', '=', $res_id); $db_query = $this->exec_select('test_db1', $query);

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

fuelだとexecuteと言うよりもconnectionが1つしか指定できないためですかね。
おそらくこの部分の認識齟齬からくる疑問だと思います。
詳しくないですがLaravelだと出来そうですが他のfwだとそう言った内容が見受けられないのでfwの機能では基本的にできないと思うので、他の回答にもある通り複数スキーマを横断的に検索できるユーザーを別途作成する事になるかと思います。

投稿2018/12/14 06:08

編集2018/12/14 06:10
kintonet

総合スコア73

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

その実行しようとしている SQL は、例えばコマンドライン等で SQL 文を実行して実際に実行できるのでしょうか?
まず大前提として、そもそも2つの DB をまたがって SQL を実行するためには、その2つの DB に同時にアクセスできる権限を持つユーザーでその SQL を実行する必要があります。

上記をクリアできているのであれば、そのユーザーでアクセスできるコネクションを指定すれば、2つの DB を跨るような SQL でも FuelPHP から実行することは可能です。

投稿2018/12/13 07:38

編集2018/12/13 07:39
ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enigumalu

2018/12/13 07:52

すいません、接続ユーザーとパスワードはそれぞれ異なります。 ご指摘の内容は追記しました。
ssasaki

2018/12/13 08:00

その場合、そもそも2つのDBに跨るSQLは実行できないので、クエリビルダからも実行は出来ません。
guest

0

ベストアンサー

SQL文でスキーマをまたがるクエリーが実行できるのであれば、
DB::query()を使えばいいと思うし、
そうでなくてもDB::select()を駆使して
同じような形が生成できればいいんじゃないかと思う。

スキーマをまたがるクエリーは実行できるよ、という事例:
MySQL5:異なるデータベース間のテーブル結合 DB名:db1 TABLE名… - 人力検索はてな

今回の件は該当しないと思うけど、
接続先DBを切り替えて使う方法:
FuelPHPで複数データベースの切り替え - BTT's blog

私mysql民じゃないので詳しくないのだが、
権限の設定(GRANT文) - ユーザーの作成 - MySQLの使い方
にあるようにGRANT文を使って予め他のスキーマのユーザーに対してもSELECT権限を与えておけば、
あとはFuelPHPからでも普通にSELECTとか出来るんじゃないかなと思えますが。

投稿2018/12/13 07:36

編集2018/12/13 08:06
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enigumalu

2018/12/13 08:01

test_db1,test_db2への接続ユーザーとパスワードがそれぞれ異なるため、 2つのdb両方にコネクションを指定し、sqlの実行でDB.tableで接続可能という感じでしょうか? // test_db1 を参照 Model_Hoge::query()->connection('test_db1')->get(); // test_db2 を参照 Model_Hoge::query()->connection('test_db2')->get();
退会済みユーザー

退会済みユーザー

2018/12/13 08:07

それ、接続先を切り替えるやり方ですよね。 そうじゃなくて、test_db2に接続している状態で、test_db1のユーザーがselect出来るように 権限を与えればいいんじゃないかなって、思えますが。さていかに?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問