php – PDO / SQLite:覆盖两个相关数据库的单个查询
上下文
玩两个Feeddemon的SQLite数据库,tags.fdb和feeds.fdb,我创建了这个工作原始查询(使用Firefox’方便的插件SQLite管理器测试): 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 feed).它列出了所有标记的帖子及其标签名称和超链接.如您所见,数据库内容与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中连接到两个数据库还会创建两个对象: $db1 = new PDO('sqlite:tags.fdb'); $db2 = new PDO('sqlite:feeds.fdb'); 但是如果我想查询,我必须指定一个对象: $result = $db1->query('SELECT * FROM sometable'); 那么如何弥合差距并使用一个查询来定位两个数据库呢? 或者我可以直接在PDO中使用SQLite的ATTACH数据库AS别名功能吗?如果是这样,怎么样?但这可能被认为是不好的做法,对吗?由于PDO旨在成为非特定的数据库. 我认为这个用户最终都在寻找相同的东西,但从来没有真正达到工作代码示例的要点: How do you join two PDO objects in the same foreach loop? 注意:回答时,请考虑一下这个事实,即我是一名前端/图形人员,大约两个月前才开始学习PHP / PDO / SQLite.问题可能高于我的经验水平.我很惊讶我设法让原始查询正常工作.但我在学习… 解决方法
要从SQLite中的一个查询访问多个数据库,您必须对它们进行ATTACH.
使用PDO,它的工作方式与执行任何其他SQL命令的方式相同;你只需指定一个不同的文件名(和目录,如果需要): $db = new PDO('sqlite:tags.db'); $db->exec('ATTACH 'feeds.db' as feeds'); $result = $db->query('SELECT tbl_tags.tag_name,feeds.tbl_posts.link ...'); 虽然PDO主要独立于实际数据库,但您无法避免指定sqlite:打开数据库时,您可以使用的实际SQL方言总是取决于数据库.出于实际目的,ATTACH命令在逻辑上是打开数据库的一部分,而feeds.tbl_posts只是一个表名. 注意:SQLite在所有附加数据库中搜索表名,因此您可以省略唯一表名的数据库名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |