es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccionar en Codeigniter muestra un error ambiguo.

Tengo estas funciones en mi modelo:

function getIDByUsername($username)
{

    $this->db->select('id');
    $this->db->from('users');
    $this->db->where('username', $username);
    return $this->db->get()->row()->id;

}

public function getData($rowno,$rowperpage,$username='', $title='', $tag='', $category='', $status='', $type='', $sort='', $order='') 
{

    $this->db->select('id, title, duration, active');
    $this->db->from('videos');

    if($title != ''){
        $this->db->like('title', $title);
    }
    if($status != 0) {
        $this->db->like('active', $status);
    }

    if($username != ''){
        $this->db->like('user_id', $this->getIDByUsername($username));
    }

    $this->db->limit($rowperpage, $rowno); 

    $result = $this->db->get();

    return $result->result_array();

}

y estoy recibiendo este error:

La columna 'id' en la lista de campos es ambigua

SELECT id, title, duration, active, id FROM videos, users WHERE active LIKE %1% ESCAPE '!' AND username = 'testing'

Mi pregunta es ¿por qué se fusionan estos dos selects? ¿Este que proviene de la función getIDByUsername y el select de la función getData?

Mis tablas son:

Tabla videos:

id bigint(20) NOT NULL
user_id bigint(20) NOT NULL DEFAULT 0
title varchar(120) NOT NULL DEFAULT ''
description text DEFAULT NULL

Tabla users:

id bigint(20) NOT NULL
username varchar(100) NOT NULL DEFAULT ''
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “Columna ‘id’ en la lista de campos es ambigua” indica que hay dos o más columnas con el mismo nombre (‘id’) incluidas en la declaración SELECT, lo cual causa un conflicto en la consulta de la base de datos.

    Al examinar el código proporcionado, parece que la función getIDByUsername() se utiliza en la función getData() como parámetro para la cláusula WHERE. El problema es que ambas funciones tienen una declaración SELECT que incluye la columna ‘id’, lo que provoca la ambigüedad.

    Para solucionar este problema, puedes modificar la función getData() para seleccionar solo las columnas necesarias de la tabla ‘videos’ y excluir la columna ‘id’ de la declaración SELECT. La columna ‘id’ se puede seleccionar de la tabla ‘users’ por separado mediante una declaración JOIN que conecta las dos tablas en función de las columnas ‘user_id’ e ‘id’.

    Aquí tienes una versión actualizada de la función getData():

    public function getData($rowno,$rowperpage,$username='', $title='', $tag='', $category='', $status='', $type='', $sort='', $order='') 
    {
    
        $this->db->select('videos.id, videos.title, videos.duration, videos.active');
        $this->db->from('videos');
        $this->db->join('users', 'users.id = videos.user_id');
    
        if($title != ''){
            $this->db->like('videos.title', $title);
        }
        if($status != 0) {
            $this->db->like('videos.active', $status);
        }
    
        if($username != ''){
            $this->db->like('users.username', $username);
        }
    
        $this->db->limit($rowperpage, $rowno); 
    
        $result = $this->db->get();
    
        return $result->result_array();
    
    }
    

    En esta versión, la declaración SELECT solo incluye las columnas necesarias de la tabla ‘videos’ y la columna ‘id’ se selecciona de la tabla ‘users’ mediante una declaración JOIN. Esto debería resolver la ambigüedad y permitir que la consulta se ejecute sin errores.

Comments are closed.