コンテクスト
FeeddemonのSQLiteデータベースの2つであるtags.fdbとfeeds.fdbを試して、この動作する生のクエリを作成しました(Firefoxの便利なアドオンSQLite Managerを使用してテスト済み)。
SELECT tbl_tags.tag_name, feeds.tbl_posts.link
FROM tbl_tags
INNER JOIN feeds.tbl_posts
ON tbl_tags.fd_postid=feeds.tbl_posts.fd_postid
ORDER BY tbl_tags.tag_name
主にFeeddemonのtags.fdbと添付のfeeds.fdbデータベースファイルの両方をクエリします(SQLiteの機能を使用ATTACH feeds.fdb AS feeds
)。タグ付けされたすべての投稿が、タグ名とハイパーリンクとともに一覧表示されます。ご覧のとおり、データベースのコンテンツはfd_postidによって関連付けられています。
何が起こるかを視覚化する例:
tags.fdbのtbl_tagsテーブルの内容:
fd_postid tag_name
1 rainbow
2 orange
5 green
feeds.fdbのtbl_postsテーブルの内容:
fd_postid link
1 google.com
2 stackoverflow.com
3 microsoft.com
4 slashdot.org
5 techcrunch.com
tag_name順に並べられたクエリ結果:
green techcrunch.com
orange stackoverflow.com
rainbow google.com
質問
PHPでPDOを使用して、この単一の内部結合クエリを実装して、複数の関連データベースをカバーするにはどうすればよいですか?
PDOで2つのデータベースに接続すると、次の2つのオブジェクトも作成されます。
$db1 = new PDO('sqlite:tags.fdb');
$db2 = new PDO('sqlite:feeds.fdb');
ただし、クエリを実行する場合は、単一のオブジェクトを指定する必要があります。
$result = $db1->query('SELECT * FROM sometable');
では、ギャップを埋め、1つのクエリを使用して両方のデータベースをターゲットにするにはどうすればよいですか?
または、SQLiteのATTACH database AS alias
機能をPDOで直接使用できますか?もしそうなら、どのように?しかし、これはおそらく悪い習慣と見なされるでしょう?PDOはデータベースを非特定にすることを目的としているためです。
このユーザーは最終的に同じことを探していたと思いますが、実際に動作するコードサンプルのポイントに到達することはありませんでした。
同じforeachループで2つのPDOオブジェクトをどのように結合しますか?
注:回答するときは、私がフロントエンド/グラフィックスの人であり、約2か月前からPHP / PDO/SQLiteを学び始めたという事実を考慮してください。質問はおそらく私の経験レベルを超えています。生のクエリを機能させることができたのには驚いています。しかし、私は学んでいます...