Codeigniter: таблицы не используются - PullRequest
0 голосов
/ 05 июня 2018

У меня есть таблица пользователей.Какие данные много повторяющихся данных.Я хочу сохранить все эти дубликаты данных.Итак, у меня есть 3 условия

  1. Учетная запись без изображения
  2. Учетная запись с изображением
  3. Дублирующая учетная запись с изображением или без изображения

Например

ID |Email |Picture
1 |ba@mail.com |img.jpg
2 |ba@mail.com | NULL
3 |ba@mail.com |img2.jpg
4 |ba@mail.com | NULL
5 |aa@mail.com | NULL

Итак, как получить идентификатор этого дубликата учетной записи, но приоритизация изображения не является нулевой и приоритезация последнего идентификатора?(Я хочу, чтобы он возвращал «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');
            }

Он хорошо работает, если учетная запись дублируется, и оба они с NULL на столбце изображения.Но это не очень хорошо работает, когда учетная запись не дублирует ИЛИ не дублирует, но у одного из них изображение не равно нулю.

Здесь код ошибки: Номер ошибки: 1096 Таблицы не используются

Спасибо!

Ответы [ 4 ]

0 голосов
/ 06 июня 2018

Попробуйте использовать эти 3 условия и дайте мне знать, если это работает.

$ this-> db-> select (GROUP_CONCAT (id), email, GROUP_CONCAT (изображение));

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

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

0 голосов
/ 05 июня 2018

Возможно, вам следует переместить картинки в другую таблицу и использовать там в качестве внешнего ключа 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();
0 голосов
/ 05 июня 2018

Наконец-то только что сделал с каким-то грязным и хитрым кодом

$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');
        }

Это просто очень хорошо работает.Спасибо за помощь!

0 голосов
/ 05 июня 2018

Это может быть опасно для вас

//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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...