2013-05-08 66 views
11

我的查询有问题我需要连接来自不同数据库的两个表现在我的问题是如何执行我的查询。我得到了我的语法格式从这里如何在CodeIgniter中执行我的SQL查询

请访问第一此链接,所以你能理解为什么我的SQL语法是这样
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


进出口使用笨,这里是什么我的查询看起来像一个想法:
请注意,我选择我的列的方式:DATABASE_NAME.TABLE_NAME.COLUMN_NAME

$ENROLLEES = $this->load->database('ENROLLEES', TRUE); 
$ACCOUNTS = $this->load->database('ACCOUNTS', TRUE); 

$SELECT = "SELECT $ACCOUNTS.BALANCES_TABLE.IDNO, $ACCOUNTS.BALANCES_TABLE.balance"; 
$FROM  = "FROM $ACCOUNTS.BALANCES_TABLE"; 
$WHERE  = "$ACCOUNTS.BALANCES_TABLE.IDNO IN (SELECT $ENROLLEES.ENROLLEES_TABLE.IDNO FROM $ENROLLEES.ENROLLEES_TABLE)"; 

$SQL  = $SELECT ." ". $FROM ." ". $WHERE; 

主要问题:如何执行我的查询?
如果我们像这样的笨:

$ENROLLEES->query($SQL); or $ACCOUNTS->query($SQL); 

我怎么能执行我的查询有多个数据库即时通讯?我会在这里提供什么
[database]->query($SQL);

+0

CHK这 - http://stackoverflow.com/questions/7601028/using-multiple-databases-within-codeigniter – 2013-05-08 07:55:52

+0

你真的需要两个数据库吗,可能更容易使用两个表? – Ryan 2013-05-08 07:57:14

+0

sir @SureshKamrushi你没有得到我的问题,我知道如何定义到CI中的数据库,我想从2个不同的数据库中加入2个表,我将在CI的语法'your_database-> query(SQL)中提供什么;'?因为我从两个数据库查询 – 2013-05-08 07:59:43

回答

11

如果数据库共享服务器,拥有一个具有权限来两个数据库的登录,并简单地有一个查询运行类同:

$query = $this->db->query(" 
SELECT t1.*, t2.id 
FROM `database1`.`table1` AS t1, `database2`.`table2` AS t2 
"); 

否则,我认为你可能必须单独运行2个查询然后修复逻辑。

+0

我有3个数据库加载在我的'config.php'文件中。我有这些'$ ENROLLEES = $ this-> load-> database('ENROLLEES',TRUE); $ ACCOUNTS = $ this-> load-> database('ACCOUNTS',TRUE);'显然最后一个是'default'。如果我使用'$ this-> db-> query()'这将意味着使用默认数据库的Im。 – 2013-05-08 08:37:43

+1

您只需要一个连接,即一个“加载到数据库”。如果在这种情况下,您加载的用户可以访问所有给定的数据库。在获取表格时,可以指定'database'.'table'。 – 2013-05-08 08:43:53

+0

你的意思是先生,我不会加载我的2个其他数据库,只使用我的默认? – 2013-05-08 08:48:22

2

我可以看到@解冻提到什么:

$ENROLLEES = $this->load->database('ENROLLEES', TRUE); 
$ACCOUNTS = $this->load->database('ACCOUNTS', TRUE); 

笨支持多种数据库。您需要像上面那样将两个数据库引用保存在单独的变量中。到目前为止,你是对的/正确的。

接下来你需要如下使用它们:

$ENROLLEES->query(); 
$ENROLLEES->result(); 

$ACCOUNTS->query(); 
$ACCOUNTS->result(); 

而不是使用

$this->db->query(); 
$this->db->result(); 

的看到这个供参考: http://ellislab.com/codeigniter/user-guide/database/connecting.html

24
$query = $this->db->query($SQL); 

return $query->result_array(); 
+0

这应该避免不惜一切代价,原因如下:1)它绕过了活动记录模式(= ARP),代码点火器提供了“原生”查询。 2)你必须照顾自己逃脱(当你使用ARP时,CI会为你做)。如果你不这样做,** SQL注入**很可能会发生。 3)查询结果的高速缓存可能不会影响它们,导致更多的SQL语句和较低的性能。换句话说:将您的SQL查询重写为ARP,这是CI 2/3的常见方式。 – Roland 2017-09-19 10:10:51

0
return $this->db->select('(CASE 
      enter code hereWHEN orderdetails.ProductID = 0 THEN dealmaster.deal_name 
      WHEN orderdetails.DealID = 0 THEN products.name 
      END) as product_name') 
0

$这个 - > DB->选择( 'ID,名称,价格,作者,类别,语言,国际标准书号,出版日期');

 $this->db->from('tbl_books');