Welcome Guest, Not a member yet? Register   Sign In
Strange problem with join method from ActiveRecord class [SOLVED]
#1

[eluser]Muser[/eluser]
Hi, I need to contruct a query with multiple left join and I am using the active record class to build the SQL statement. For some reason, the query executed do one LEFT JOIN, and three JOIN's.

Code:
$this->db->select(
            'projectes.idProjecte,
            projectes.nom_'.$this->config->item('lang_selected').' AS nom,
                        projectes.descripcio_'.$this->config->item('lang_selected').' AS descripcio,
            projectes.data_inici,
            projectes.data_finalitzacio,
                        projectes.webs_relacionades,
            projectes_valorconservacio.nom_'.$this->config->item('lang_selected').' AS valorconservacio_nom,
                        projectes_tipusespai.nom_'.$this->config->item('lang_selected').' AS tipusespai_nom,
                        projectes_ambitactuacio.nom_'.$this->config->item('lang_selected').' AS ambitactuacio_nom,
                        projectes_tipusaccio.nom_'.$this->config->item('lang_selected').' AS tipusaccio_nom
            ',FALSE);
                $this->db->from('projectes');
        $this->db->join('projectes_valorconservacio', 'projectes.idValorConservacio = projectes_valorconservacio.idValorConservacio','left');
                $this->db->join('projectes_tipusespai','projectes.idTipusEspai','projectes_tipusespai.idTipusEspai','left');
                $this->db->join('projectes_ambitactuacio','projectes.idAmbitActuacio','projectes_ambitactuacio.idAmbitActuacio','left');
                $this->db->join('projectes_tipusaccio','projectes.idTipusAccio','projectes_ambitactuacio.idTipusAccio','left');
        $this->_where_condicions($condicions);
        $this->db->order_by($ordre);
        $this->db->limit($limit,$offset);
        $query = $this->db->get();

The profiler says:

SELECT projectes.idProjecte, projectes.nom_ca AS nom, projectes.descripcio_ca AS descripcio, projectes.data_inici, projectes.data_finalitzacio, projectes.webs_relacionades, projectes_valorconservacio.nom_ca AS valorconservacio_nom, projectes_tipusespai.nom_ca AS tipusespai_nom, projectes_ambitactuacio.nom_ca AS ambitactuacio_nom, projectes_tipusaccio.nom_ca AS tipusaccio_nom
FROM (projectes)
LEFT JOIN projectes_valorconservacio ON projectes.idValorConservacio = projectes_valorconservacio.idValorConservacio
JOIN projectes_tipusespai ON projectes.idTipusEspai
JOIN projectes_ambitactuacio ON projectes.idAmbitActuacio
JOIN projectes_tipusaccio ON projectes.idTipusAccio
ORDER BY data_inici
LIMIT 5

and the query it must be:

SELECT projectes.idProjecte, projectes.nom_ca AS nom, projectes.descripcio_ca AS descripcio, projectes.data_inici, projectes.data_finalitzacio, projectes.webs_relacionades, projectes_valorconservacio.nom_ca AS valorconservacio_nom, projectes_tipusespai.nom_ca AS tipusespai_nom, projectes_ambitactuacio.nom_ca AS ambitactuacio_nom, projectes_tipusaccio.nom_ca AS tipusaccio_nom
FROM (projectes)
LEFT JOIN projectes_valorconservacio ON projectes.idValorConservacio = projectes_valorconservacio.idValorConservacio
LEFT JOIN projectes_tipusespai ON projectes.idTipusEspai
LEFT JOIN projectes_ambitactuacio ON projectes.idAmbitActuacio
LEFT JOIN projectes_tipusaccio ON projectes.idTipusAccio
ORDER BY data_inici
LIMIT 5

What I'm doing wrong?
#2

[eluser]garymardell[/eluser]
Okay, i spotted it straight away.

Code:
$this->db->join('projectes_valorconservacio', 'projectes.idValorConservacio = projectes_valorconservacio.idValorConservacio','left');
                $this->db->join('projectes_tipusespai','projectes.idTipusEspai','projectes_tipusespai.idTipusEspai','left');

Compare the difference between these 2 lines of code for the second parameter. Its meant to be "some.field = another.field" but for some reason on the next one you are trying to pass an extra parameter. 'left' should bethe third parameter.
#3

[eluser]Muser[/eluser]
Oh!! Thanks!

Now it works ok




Theme © iAndrew 2016 - Forum software by © MyBB