1

所以我承认这个标题有点令人困惑,我很抱歉,因为我不知道该怎么做,所以对那里的建议持开放态度。无论如何,关于实际问题。我有一个查询,大部分情况下都可以正常工作,但是我仍然会产生一些错误的结果。也是可以理解的。因为这就是形成查询的方式。对许多ands和许多ors松散地串在一起。我需要做的是在其中包含一组 where 子句,( )然后在另一个中包含一个andthen 剩余的子句集,( )我不知道这对任何人是否有意义。

基本上,如果我直接手动输入查询,它看起来像..

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);

但我最终想要的是一组中的所有这些特定条款..

->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 回答