Codeigniter: нет использованных таблиц

Yudhistira Bayu спросил: 12 мая 2018 в 04:49 в: php

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

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

Например

ID | Электронная почта | Изображение
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 на картинке колонка. Но это не сработает, если учетная запись не дублирует ИЛИ не дублирует, но у одного из них есть изображение не null.

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

Спасибо!

4 ответа

Dhanu K ответил: 12 мая 2018 в 05:11

Это может вам помочь

//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;
Kisaragi ответил: 12 мая 2018 в 05:32

Скорее всего, вы должны переместить фотографии в другую таблицу и использовать 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();
Yudhistira Bayu ответил: 12 мая 2018 в 06:04
codeigniter имеет функцию select_max для db
Есть решение
Yudhistira Bayu ответил: 12 мая 2018 в 06:03

Наконец, просто сделанный с каким-то грязным n сложным кодом

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

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

NIRAV PAREKH ответил: 12 мая 2018 в 03:40

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

$ this- > db- > select (GROUP_CONCAT (id), email, GROUP_CONCAT (картинка));

$ this- & Гт db- & Гт group_by ( 'электронная почта');

$ this- & Гт db- & Гт order_by ( 'картинка', 'DESC'); р >