草庐IT

php - PDO/SQLite : Single query covering two related databases

coder 2024-04-16 原文

上下文

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

$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 旨在成为非特定数据库。

我认为这个用户最终也在寻找同样的东西,但从未真正达到工作代码示例的目的:

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 在所有附加的数据库中搜索表名,因此您可以省略唯一表名的数据库名称。

关于php - PDO/SQLite : Single query covering two related databases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886480/

有关php - PDO/SQLite : Single query covering two related databases的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  3. ruby-on-rails - Rails 基本 Base64 身份验证 - 2

    我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c

  4. ruby - Sinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题 - 2

    出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t

  5. ruby-on-rails - 在 rails 中显示 base64 编码的图像 - 2

    我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve

  6. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  7. ruby-on-rails - Ruby 中属性和 base_attributes 之间的区别? - 2

    我见过几个模型定义了一个静态方法self.base_attributes{:object=>[]}end还有一些模型定义了静态方法self.attributes@@attributes={}end属性和基本属性到底有什么区别? 最佳答案 在您的示例中,您无需了解更多代码,self.attributes方法使用类变量(@@attributes),这意味着您可以添加在运行时给它更多的属性。因为您的base_attributes是硬编码的。我怀疑你看到的是这样的东西:base_attributes.merge(attributes)这可能

  8. ruby-on-rails - Rspec Controller 在 Rails 中测试继承自 AbstractController::Base 的 Controller - 2

    我正在为我未构建的应用程序编写Controller测试,因此这绝对是一个学习过程。这是我第一次遇到直接继承自AbstractController::Base的Controller。显然,它的行为与其他Controller不同。其格式大致为:classSchwadGenericController我尝试了正常测试,这是我目前要让任何事情发生的地方。require'rails_helper'describeSchwadGenericControllerdo#before(:each)do#SchwadGenericController.skip_authorize_resource#end

  9. ruby-on-rails - 从 Rails 上的 base64 编码图像中检索文件名和内容类型 - 2

    我正在尝试检索以base64编码格式接收的图像的内容类型和文件名。这是使用base64编码图像执行POST请求的代码require'net/http'require"rubygems"require'active_support'url=URI.parse('http://localhost:3000/')image=ActiveSupport::Base64.encode64(open("public/images/rails.png").to_a.join)post_params={'image'=>image}Net::HTTP.post_form(url,post_params

  10. ruby - Sinatra::Base.condition 实际上做了什么? - 2

    我遇到了sinatracondition方法,但对它的工作原理感到困惑。我有一段代码:defauthuserconditiondoredirect'/login'unlessuser_logged_in?endend它检查用户是否登录了某些路由,示例路由:get'/',:auth=>:userdoerb:indexenduser_logged_in?方法定义在项目lib目录下的帮助文件中:defuser_logged_in?ifsession[:user]@user=session[:user]return@userendreturnnilend所以,问题是:conditionbloc

随机推荐