繁体   English   中英

PDO / SQLite:覆盖两个相关数据库的单个查询

[英]PDO / SQLite: Single query covering two related databases

上下文

玩两个Feeddemon的SQLite数据库, tags.fdbfeeds.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 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中连接到两个数据库还会创建两个对象:

$db1 = new PDO('sqlite:tags.fdb');
$db2 = new PDO('sqlite:feeds.fdb');

但是如果我想查询,我必须指定一个对象:

$result = $db1->query('SELECT * FROM sometable');

那么如何弥合差距并使用一个查询来定位两个数据库呢?

或者我可以直接在PDO中使用SQLite的ATTACH database AS alias功能吗? 如果是这样,怎么样? 但这可能被认为是不好的做法,对吗? 由于PDO旨在成为非特定的数据库。

我认为这个用户最终都在寻找相同的东西,但从来没有真正达到工作代码示例的要点:

如何在同一个foreach循环中连接两个PDO对象?

注意:回答时,请考虑一下这个事实,即我是一名前端/图形人员,大约两个月前才开始学习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在所有附加数据库中搜索表名,因此您可以省略唯一表名的数据库名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM