使用 Feeddemon 的两个 SQLite 数据库,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 中连接两个数据库也会创建两个对象:
$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/
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我正在尝试复制此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
出于某种原因,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
我正在向我的Controller发送一个base64图像并按原样保存它。现在我需要显示该图像。这是我要显示的内容,但未显示图像:"/>为了编码,我使用了这个java脚本函数encodeURIComponent();我的编码图像格式:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/........ 最佳答案 你不需要解码base64应该可以 关于ruby-on-rails-在rails中显示base64编码的图像,我们在StackOve
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我见过几个模型定义了一个静态方法self.base_attributes{:object=>[]}end还有一些模型定义了静态方法self.attributes@@attributes={}end属性和基本属性到底有什么区别? 最佳答案 在您的示例中,您无需了解更多代码,self.attributes方法使用类变量(@@attributes),这意味着您可以添加在运行时给它更多的属性。因为您的base_attributes是硬编码的。我怀疑你看到的是这样的东西:base_attributes.merge(attributes)这可能
我正在为我未构建的应用程序编写Controller测试,因此这绝对是一个学习过程。这是我第一次遇到直接继承自AbstractController::Base的Controller。显然,它的行为与其他Controller不同。其格式大致为:classSchwadGenericController我尝试了正常测试,这是我目前要让任何事情发生的地方。require'rails_helper'describeSchwadGenericControllerdo#before(:each)do#SchwadGenericController.skip_authorize_resource#end
我正在尝试检索以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
我遇到了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