我有两个数据库:
- 第一个是 MySQL
- 第二个是MSSQL
我需要从 MSSQL DB 中获取一些信息,但是结果(选择)将根据来自 MySQL 的参数(日期)受到限制。数据库位于不同的服务器中。
我必须为此执行两个查询还是可以一次完成?
谢谢!
我有两个数据库:
我需要从 MSSQL DB 中获取一些信息,但是结果(选择)将根据来自 MySQL 的参数(日期)受到限制。数据库位于不同的服务器中。
我必须为此执行两个查询还是可以一次完成?
谢谢!
可以将 MySQL 服务器定义为 MS SQL 中的链接服务器对象,因此可以只查询 MS SQL 服务器,在查询中调用 MySQL 链接服务器。但是,这会增加管理开销,并且如果 MySQL 主机关闭,您可能会失去对 MySQL 主机的良好错误检查。
只设置两个连接资源并单独查询它们对我来说更有意义。
您显然需要两个不同的连接,因此需要 2 个查询,因为这些连接的资源不一样(无论如何,用于执行查询的函数不会相同,除非您使用抽象层连接到不同的服务器,但仍然需要 2 个连接资源)。
Afaik,除非你使用某种你不能使用的抽象,否则底层协议是不同的。我同意迈克尔的观点。这就是我实现它的方式。
//php5-sybase : Module for Sybase and MSSQL
//freetds-dev : Implements Tabular DataStream protocol for linux which is used by Sybase and MSSQL
putenv('FREETDSCONF=/etc/freetds/freetds.conf');
function dbOpenConnection(){
//create mssql connection
$db = mssql_connect('host','user','pass');
$msdb = mssql_select_db('db_name',$db);
//create mysql connection
$conn = mysql_connect('db_server','user','pass');
mysql_select_db('db_name',$conn);
return array($db, $msdb, $conn);
}
还有你的freetds conf:
# A typical Microsoft server
[BData]
host = xxx.xxx.xxx.xxx
port = 1433
tds version = 8.0
您无法在一个查询中做到这一点。你必须分两次做。
如果你想在一个语句中写一个嵌套查询。这就像
SELECT * FROM ms_sql_table WHERE some_var = (result_from_nested_mysql_subquery)
你不能。没有办法向服务器池询问单个查询。但是,您可以像这样回收查询:
$sql = "SELECT * FROM table";
$result = array();
foreach($serversPool as $server){
$result []= query($server, $sql);
}
$con = mysql_connect(SQL_HOST,SQL_USER,SQL_PASS);
$con1 = mssql_connect(SQL_HOST1,SQL_USER1,SQL_PASS1);
mysql_query($mysql_query);
mssql_query($mssql_query);
这应该可以,但是您需要使用两个不同的连接和查询。