Php Codeigniter:没有使用表

Php Codeigniter:没有使用表,php,sql,codeigniter,Php,Sql,Codeigniter,我有一个用户表。哪些数据是大量重复数据。我想保留所有那些重复的数据。所以我有3个条件 没有图片的帐户 用图片叙述 有图片或无图片的重复帐户 比如说 ID|电子邮件|图片 1 | ba@mail.com| img.jpg 2 | ba@mail.com|空 3 | ba@mail.com| img2.jpg 4 | ba@mail.com|空 5 | aa@mail.com|空 那么,如何获得这些重复帐户的ID,但优先排序图片不为空,并优先排序最新的ID?(我希望它返回'3') 在这里我

我有一个用户表。哪些数据是大量重复数据。我想保留所有那些重复的数据。所以我有3个条件

  • 没有图片的帐户
  • 用图片叙述
  • 有图片或无图片的重复帐户
  • 比如说

    ID|电子邮件|图片
    1 | ba@mail.com| img.jpg
    2 | ba@mail.com|空
    3 | ba@mail.com| img2.jpg
    4 | ba@mail.com|空
    5 | aa@mail.com|空

    那么,如何获得这些重复帐户的ID,但优先排序图片不为空,并优先排序最新的ID?(我希望它返回'3')

    在这里我尝试代码

    $this->db->select('id');
            $this->db->from('users');
            $this->db->where('email', $email);
            $query0 = $this->db->get();
    
            if($query0->num_rows() == 1){
                return $query0->row('id');
            } else {
                $this->db->select('id');
                $this->db->from('users');
                $this->db->where(array('email' => $email, 'picture IS NOT' => NULL));
                $query1 = $this->db->get();
                if($query1->num_rows() == 1){
                    return $query1->row('id');
                } else {
                    $this->db->select('id');
                    $this->db->from('users');
                    $this->db->where('email', $email);
                    $this->db->limit('1');
    
                    return $this->db->get()->row('id');
                }
    
    如果帐户重复,并且两者在图片列上都为空,则效果良好。但是,当帐户不重复或重复,但其中一个帐户的图片不为空时,它就不能正常工作

    下面是错误代码: 错误号码:1096 没有使用桌子


    谢谢大家!

    这可能对你有好处

    //in below query $emil is your input taht you need to find duplicate
    $q=$this->db->query("SELECT MAX(id) AS id FROM users WHERE picture IS NOT NULL AND email = '$email');
    $id=$q->row()->id;
    

    您可能应该将图片移动到另一个表中,并在其中使用user.id作为外键。无论如何,这听起来像是你想要的:

        $this->db->select('max(id)');
        $this->db->where('(email = "$email" and picture is not null) or email = "$email"');
        $result = $this->db->get('users')->row();
    

    终于完成了一些复杂的代码

    $this->db->select_max('id');
            $this->db->from('users');
            $this->db->where(array('email' => $email, 'picture IS NOT NULL' => NULL));
            if($this->db->get()->row('id') >= 1){
                $this->db->select_max('id');
                $this->db->from('users');
                $this->db->where(array('email' => $email, 'picture IS NOT NULL' => NULL));
                return $this->db->get()->row('id');
            } else {
                $this->db->select_max('id');
                $this->db->from('users');
                $this->db->where('email',$email);
                return $this->db->get()->row('id');
            }
    

    这很有效。谢谢你的帮助

    尝试使用这3种条件,并告诉我是否有效

    $this->db->select(GROUP_CONCAT(id)、email、GROUP_CONCAT(picture))

    $this->db->group_by('email')


    $this->db->order_by('picture','DESC')

    在将来的某个时候,你会因为这样的设计而自责
    从用户中选择max(id),其中picture不为null,email='email'
    只是更新我的表@kisaragit这是一个奇怪的模式