【问题标题】:Multiple Join in codeigniter don't wortkcodeigniter中的多个加入不起作用
【发布时间】:2018-08-25 15:57:27
【问题描述】:

你能帮我修复我的错误吗?

我尝试加入三个表:Users、crush 和 discrush。

但此代码未找到结果。

数据库:

  • 用户:id 等
  • 暗恋:id、user_id、user_id_to
  • Discrush:id、user_id、user_id_to

查询:

SELECT
  *
FROM
  `users`
  RIGHT JOIN `discrush` ON `users`.`id` = `discrush`.`user_id_to`
  RIGHT JOIN `crush` ON `users`.`id` = `discrush`.`user_id_to`
WHERE
  `users`.`sexe` = 'female'
  AND `users`.`valid_admin` = '1'
  AND `users`.`id` NOT IN('81')
  AND `crush`.`user_id_to` is NULL
  OR `users`.`sexe` = 'female'
  AND `users`.`valid_admin` = '1'
  AND `users`.`id` NOT IN('81')
  AND `discrush`.`user_id_to` is NULL
ORDER BY
  RAND()

型号:

function GetUserForCrushRoom($my_user_id, $sexe)
{
    $this->db->select('*');
    $this->db->from('users');
    $this->db->join('discrush', 'users.id = discrush.user_id_to', 'right');
    $this->db->join('crush', 'users.id = discrush.user_id_to', 'right');

    $this->db->where('users.sexe =', $sexe);
    $this->db->where('users.valid_admin =', '1');
    $this->db->where_not_in('users.id', $my_user_id);
    $this->db->where('crush.user_id_to is NULL');

    $this->db->or_where('users.sexe =', $sexe);
    $this->db->where('users.valid_admin =', '1');
    $this->db->where_not_in('users.id', $my_user_id);
    $this->db->where('discrush.user_id_to is NULL');
    $this->db->order_by('users.id', 'RANDOM');
    $query = $this->db->get();
    return $query->row();

}

控制器:

public function crush_room()
{
    $my_user_id = $this->session->userdata('user_id');
    if($my_user_id != '')
    {
        $data['my_user_id'] = $my_user_id;
        $my_user = $this->home->get_user($my_user_id);

            $sexe = $my_user->sexe;

            if($my_user->sexe == 'male')
            {
                $sexe = 'female';
            }else{
                $sexe = 'male';
            }

            $data['user'] = $this->home->GetUserForCrushRoom($my_user_id, $sexe);

            if($data['user']){
                $data['user_crush'] = $this->home->CheckCrush($my_user_id, $data['user']->id);
                $data['user_block'] = $this->home->CheckBlockUser($my_user_id, $data['user']->id);
            }

            $data['users'] = $this->home->get_all_user_crush($my_user_id);

            $this->load->view('crush_room', $data);
    }
    else{
        redirect('login');
    }
}

【问题讨论】:

  • echo $this->db->get_compiled_select()查看查询
  • 查询添加到原帖
  • 您能告诉我们您期望的结果是什么,以便我们为您提供帮助吗?
  • 没有结果我的朋友

标签: php mysql sql codeigniter join


【解决方案1】:

我搞定了!

用这个替换查询...

$sql = "SELECT * FROM users U WHERE U.sexe = ? AND U.valid_admin = '1' AND U.id NOT IN (SELECT user_id_to FROM discrush UNION SELECT user_id_to FROM crush)";

    $query = $this->db->query($sql, array($sexe));

        return $query->row();

【讨论】:

    【解决方案2】:

    尝试与用户一起迷恋。

    右连接 crush 开启 users.id = crush.user_id_to

    【讨论】:

    • 尝试用 cmets 扩展您对代码的回答,它的作用是什么,为什么有效。为什么当前的解决方案不起作用,
    • 我的感觉是,他加入了crush表,但只引用了users和disrush表。这可能是个问题。
    • 它是为了创建一个网站来结识像 tinder 这样的其他人
    • 您能否提及您期望的结果集?另外请检查您的 AND 子句,可能没有与您的 where 和 AND 子句匹配的行。
    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2016-07-24
    • 2023-03-13
    相关资源
    最近更新 更多