2

こんにちは私はcodeigniterjoinを使用しています

$this->db->join

使った

$this->db->join ( $table2 . " as c","( c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID )  AND c.3rdPartyID !=0 ", 'left' );

そして私も試してみました

$join_query = "( c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID )  AND c.3rdPartyID !=0 ";

$this->db->join ( $table2 . " as c",$join_query, 'left' );

エラーが発生します。

しかし、括弧なしで、このようにうまく機能します

$this->db->join ( $table2 . " as c"," c.3rdPartyID=a.ShopID OR c.3rdPartyID=a.ParentID OR c.ShopID=a.ShopID OR c.ShopID=a.ParentID   AND c.3rdPartyID !=0 ", 'left' );

しかし、私の場合、括弧が必要です。通常のmysqlクエリに移動する必要がありますが、codeignierはこれを実行できません。助けてください...

これはエラーです

ここに画像の説明を入力してください

4

4 に答える 4

0

また

1)「ANDc.3rdPartyID!=0」を別の->where()に移動します

また

2)クエリを作成して使用します。

$sql = "Select...";
$this->db->query($sql);
于 2013-02-19T03:20:23.047 に答える
0

ellislabフォーラムからコピー:

このクエリは、Active Recordのjoin()関数を使用して実行することはできません。結合条件の特定の構造を探す正規表現の行があります(通常、table.something = table.somethingelse)。指定した結合ステートメントの最初の部分を再作成するときに、英数字とピリオド(。)以外の文字は無視されます。この理由の一部は、Active Recordが_protect_identifiersと呼ばれるプライベート関数を採用しているためです。この関数は、必要な場合に必要な情報を列名(hostname.database.table.column)に追加します(内部のファイル「DB_driver.php」を参照)。より良い説明のためのデータベースシステムフォルダ)。table.columnの前に追加の文字を追加すると、それらの文字が列名構造の中央に配置されます。

したがって、基本的に、join()関数をそのまま使用することはできません。query()関数を使用して完全に自分で書き出すか、Active Recordクラスを拡張してjoin()関数を必要に応じて書き直すことができます。

于 2013-02-19T07:20:09.773 に答える