3

我有三张桌子;user,caruser_x_car. user_x_car持有拥有汽车的用户;user_id并被car_id存储。我想让没有汽车的用户如下:

$car_owner = $this->db->select()->from('user_x_car')->get()->result();

for ($i = 0; $i < count($car_owners); $i++)
    $car_owner_id[$i] = $car_owner[$i]->user_id;

$non_car_owner = $this->db->select()->from('user')->where_not_in('id', $car_owner_id)->get()->result();

我得到了我想要的,但是,有什么方法可以绕过中间的 for 循环,该循环在第一个选择中创建和选择的 id 数组。有没有办法直接获取选定user_id的数组?

4

3 回答 3

1

你可以通过两个查询来做到这一点,比如

第一个从 user_x_car 表中获取所有 id

$temp1=array();
$temp=$this->db->distinct()->select('user_id')->get('user_x_car')->result_array();

然后从用户表中获取那些没有汽车的用户

foreach($temp as $each)
{
    array_push($temp1,$each['user_id']);
}
$rs=$this->db->where_not_in('id',$temp1)->get('user');
if($rs->num_rows()>0)
{
    $data=$rs->result_array();
    print_r($data);die;
}

$data 将打印所有没有车的用户。如果您遇到任何问题,请告诉我。

于 2013-09-20T07:16:12.063 回答
1
function get_unread_notifications_ids()
    {
        //get unread notifications ids
        $this->db->select('GROUP_CONCAT(fknotification_id) as alll');
        $this->db->from("te_notification_status_tbl");
        $this->db->where('read_status',0);

        $ids=$this->db->get()->row();
        return $idss=str_replace(",","','",$ids->alll);
    }

第二个功能是这样的:

function get_unviewed_photos_events(){
        $idss = $this->get_unread_notifications_ids();

        $this->db->select('img.*',False);
        $this->db->from("te_notifications_tbl notif");
        $this->db->join('te_images_tbl img','img.id=notif.reference_id','LEFT OUTER');

        $this->db->where("notif.id IN('".$idss."')");
        $rslt = $this->db->get()->result_array();
        return $rslt;
    }
于 2014-10-27T07:27:15.223 回答
0

询问

$non_car_owner = $this->db->query('SELECT user.*
FROM user LEFT JOIN user_x_car ON user_x_car.id=user.id
WHERE table2.id IS NULL')->result();

这里的用户不在表 user_x_car 上

foreach($non_car_owner as $user){
   echo $user->user_id;
}
于 2013-09-20T06:03:54.240 回答