2013-05-08 12 views
11

私はクエリに問題があります私は別のデータベースから2つのテーブルに参加する必要があります今私の質問はどのように私のクエリを実行することができます。
:私は私のSQL構文は、この
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-queryCodeIgniterでSQLクエリを実行するには


イム使用してCodeIgniterのようなもので、ここで私のクエリがどのように見えるかのアイデアである理由を理解できるように、第1は、このリンクをご覧ください

ここから私の構文形式を得ました私は私の列を選択しています方法に注意してください: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; 

主な問題:私のクエリを実行する方法?
私たちは、CodeIgniterの中に、このように行う場合:

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

どのように私はイムは、複数のデータベースを持つ私のクエリを実行することができますか?ここで何を提供しますか
[database]->query($SQL);?データベースの共有サーバーの場合

+0

CHK this- http://stackoverflow.com/questions/7601028/using-multiple-databases-within-codeigniter –

+0

本当に2つのデータベースが必要ですか?2つのテーブルを使用する方が簡単でしょうか? – Ryan

+0

あなたは@SureshKamrushiあなたが私の質問を得ていない、私はCIのデータベースに定義する方法を知っている、私は2つの異なるデータベースから2つのテーブルに参加しようとしている、CIの構文 'your_database->クエリ(SQL)で何を提供するのだろうか?私が2つのデータベース –

答えて

11

、データベースの両方にprivelegesを持つログインを持っている、と単純にクエリの実行似を持っている:

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

そうでなければ、私はあなたが個別に2つのクエリを実行する必要かもしれないと思います後でロジックを修正してください。

+0

私は 'config.php'ファイルに3つのデータベースを読み込んでいます。私はこれらの$ ENROLLEES = $ this-> load-> database( 'ENROLLEES'、TRUE)を持っています。 $ ACCOUNTS = $ this-> load-> database( 'ACCOUNTS'、TRUE); '明らかに最後は' default'です。 '$ this-> db-> query()'を使うと、デフォルトのデータベースを使っていることになります。 –

+1

1つの接続、つまり1つの「データベースへのロード」が必要です。この場合、読み込んだユーザーが指定されたすべてのデータベースにアクセスできる場合。また、テーブルをフェッチするときには、 'database'.table'を指定することができます。 –

+0

あなたは私の2つの他のデータベースをロードせず、私のデフォルトを使用すると言っていますか? –

2

私は雪解け@言及したものを見ることができます。

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

CodeIgniterには、複数のデータベースをサポートしています。上記のように、両方のデータベース参照を別々の変数に保存する必要があります。これまでのところあなたは正しい/正しいです。

次はあなたが以下のようにそれらを使用する必要があります。

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

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

代わりの

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

参照のためにこれを参照してください使用: 0123を

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

return $query->result_array(); 
+0

これは、いくつかの理由から避けてください。1)アクティブレコードパターン(= ARP)をバイパスしています。コードイグナイターはこれらが "ネイティブ"なので提供します。 2)自分ですべてをエスケープする必要があります(CIはARPを使うときにそれを行います)。そうしないと、** SQLインジェクション**が発生する可能性が非常に高くなります。 3)問合せ結果のキャッシュは影響を受けないため、SQL文が多くなり、パフォーマンスが低下します。換言すると、SQLクエリをARPに書き換えてください。これはCI 2/3の一般的な方法です。 – Roland

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

ます$ this-> DB->を選択し( 'ID、名前、価格、著者、カテゴリ、言語、ISBN、公開日');

 $this->db->from('tbl_books'); 
関連する問題