1

$this->db->join('database.table')この関数の 2 番目のパラメーターを挿入せずに a を使用できますか? 2 つのデータベースを接続する必要がありますが、それらをバインドするものがありません。私はそれを試したのでSQLで動作することを知っていますが、アクティブレコードを使用してモデルを変更したい.

$this->db->select('users.user_id');
$this->db->distinct();
$this->db->from('users');
$this->db->join('user_detail', 'users.user_id = user_detail.id', 'left');

そして今のようなもの:

$this->db->join('cities.city');

したがって、SQL は次のようになります。

SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city

それ以外の:

SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city ON

私が実際に持っているもの。

助けてください。ありがとうございました。

4

1 に答える 1

3

それはいけません。CI コア ファイルを見ると、ON常に渡されることがわかります。システムファイルを確認するまで、これが事実であることに気づきませんでした。

$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).' ON '.$cond;

/system/database/DB_active_rec.php340 行の参照。最新バージョン (GitHub)でも、これはまだ当てはまりますが、 または のいずれONUSING()が使用されます。

あなたの最善の策は、単に使用すること$this->db->query()です:

$this->db->query('SELECT DISTINCT users.user_id FROM users LEFT JOIN .... JOIN cities.city');

更新: 2.1.3 を使用しているため、コア ファイルをハッキングできます (CI アクティブ レコードを拡張する方法があるとは思えないため)。通常はコア ファイルを編集するべきではありませんが、少なくともこれで必要なものが得られます。開く/system/database/DB_active_rec.php:

行 310 を次のように変更します。

public function join($table, $cond, $type = '', $use_on = TRUE)

行 340 を次のように変更します (現在は 2 行になります)。

$on_cond = ($use_on === TRUE) ? ' ON '.$cond : NULL;
$join = $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE).$on_cond;

join()モデルで、パスを 4 番目のパラメータと呼び、FALSEをオフにすると、次のようになりONます。

$this->db->join('cities.city', NULL, '', FALSE);
于 2013-09-17T19:31:30.760 に答える