1

そのため、タイトルが少し混乱していることを認めます。何を作成すればよいかわからないため、申し訳ありませんが、提案をお待ちしています。とにかく実際の質問に進みます。私はクエリを持っていますが、ほとんどの場合は正常に動作しますが、まだ間違った結果が得られています。当然のことでもあります。これがクエリを形成する方法です。多くの and と多くの or が緩く結び付けられています。私がする必要があるのは、where句のセットをラップして( )からand、残りの句のセットを別の句に( )することです。それが誰にとっても意味があるかどうかはわかりません。

基本的に、クエリを完全に手で入力すると、次のようになります..

select * from my_table
where (cond1 = this and cond2 = that) 
and (cond2 != something or cond3 > other)

codeigniter のアクティブ レコードを使用してそれを達成する方法がよくわかりません。私が現在持っているのはです。

$this->db->select('user_event_invite.*, game_bridge.*, user_event.*, user_event.location as bizfo')
->from('user_event')
->join('game_bridge', 'user_event.gID = game_bridge.gID')
->join('user_event_invite', 'user_event_invite.eID = user_event.eID')
->where('user_event_invite.friendID', $mID)
->where('user_event.isactive', 0)
->where('user_event_invite.isactive', 0)
->where('user_event.ends >=', $this->genfunc->unixToMySQL(time()))
->where('user_event.ends !=', '0000-00-00 00:00:00')
->or_where('yes > ', 0)
->or_where('no > ', 0)
->or_where('maybe > ', 0);

しかし、私が最終的に望んでいるのは、これらすべての特定の節を 1 つのグループにまとめることです..

->where('user_event_invite.friendID', $mID)
->where('user_event.isactive', 0)
->where('user_event_invite.isactive', 0)
->where('user_event.ends >=', $this->genfunc->unixToMySQL(time()))
->where('user_event.ends !=', '0000-00-00 00:00:00')

次に、そのグループを結合し、AND をこの別のグループに結合します。

->or_where('yes > ', 0)
->or_where('no > ', 0)
->or_where('maybe > ', 0);
4

1 に答える 1

2

そのため、CodeIgniter は、少なくともその抽象レイヤーを使用しない限り、OR および AND SQL ステートメントの「ラップ」をサポートしていません。CodeIgniter では、OR ステートメントと AND ステートメントを混在させることは推奨されていません。

実行するクエリを理解してみることができます$this->db->last_query()

このサブクエリ ライブラリを試して、役立つかどうかを確認することもできます: http://labs.nticompassinc.com/CodeIgniter-Subqueries/

または、場合によっては RAW SQL を使用する必要があるかもしれません。

于 2012-10-22T02:49:57.290 に答える