-6

我正在尝试有条件地从数据库中获取结果。就像 a = 1 和 b != 2 以及这么多条件......

这是我的代码示例

$u = $this->ion_auth->user()->row()->id;

$hide=$this->find_hide_post();

$friend=$this->get_all_contacts();

在此之后我开始我的主要查询

$this->db->where('user_id',$u);

foreach($friend as $fr)
{
  foreach($fr as $f)
  {
    if($f->sub_id !=$u)
    {
      $this->db->or_where('user_id', $f->sub_id);
    }
    elseif($f->obj_id !=$u)
    {
      $this->db->or_where('user_id', $f->obj_id);
    }

    $this->db->where('time >', $f->time);
  }
}

我得到了很好的正确结果,但是每当我添加这些行时,我都没有得到正确的结果。但我需要从结果中删除这些帖子。

foreach($hide as $h)
{
  $this->db->where('id !=', $h->post_id);
}

最后我通过这种方式

$result=$this->db->get('my_wall');
$row=$result->result();
print_r($row);

结果是:

数组 ( [0] => stdClass 对象 ( [id] => 18 [user_id] => 19 [post] => [img] => public/users/wall/pic/Messenger14.png [doc] => [video ] => [link] => [link_name] => [access_id] => [like] => 0 [time] => 1340792296)

[1] => stdClass Object
    (
        [id] => 19
        [user_id] => 19
        [post] => This is my test Documents
        [img] => 
        [doc] => public/users/wall/doc/19/20745322_temp.pdf
        [video] => 
        [link] => 
        [link_name] => 
        [access_id] => 
        [like] => 0
        [time] => 1340792743
    )

我想避免那些 id 不是 19 或类似的帖子。但我的最后一个查询不起作用:(,结果是一样的。

4

1 回答 1

1

这是因为您的逻辑与 CodeIgniter 的 Active Record 类没有很好地混合。你不能混合or_wherewhere否则你会得到模糊的逻辑。您需要修复您的逻辑以使您的查询正确。这是我的建议。

重写您的foreach语句以将所有内容打包到一个数组中。

$ids = array();
foreach ($friend as $fr) {
    foreach($fr as $f) {
        if (...) {
            $ids[] = $f->sub_id;
        }
    }
    $this->db->where('time >', $f->time);
}

... 等等。完成foreach语句后,请改为添加以下行。

$this->db->where_in('user_id', $ids);

这应该使您能够正确呈现 SQL 语句:

foreach($hide as $h)
{
  $this->db->where('id !=', $h->post_id);
}
于 2012-07-07T20:27:13.407 回答