Problema su una query con LeftJoin

Salve a tutti,

dovrei fare un Left Join e ordinarle per posizione, questa colonna posizione è solamente nella tabella di destra ( non quella su cui ci faccio il left join). Facendo una semplice query, mi mette in modo ASC i campi che non hanno posizione ( cioè che sono null)

allora ho scritto questa query;




//mySqlWorkbench funziona

SELECT *,posizione IS NULL AS isnull

FROM `tbl_pagine`

LEFT JOIN `tbl_menu` ON tbl_pagine.id=tbl_menu.tbl_pagine_id

ORDER BY `isnull` ASC,`tbl_menu`.`posizione` ASC, `tbl_pagine`.`id` ASC


//YII

        $q_pagine = Yii::app()->db->createCommand()

                ->select('*,posizione IS NULL AS isnull')

                ->from('tbl_pagine')

                ->leftJoin('tbl_menu', 'tbl_pagine.id=tbl_menu.tbl_pagine_id')

                // ->where ('tbl_menu.posizione>0')

                ->order('isnull ASC,tbl_menu.posizione ASC')

                ->queryall();

        return $q_pagine;

 

l’errore che mi viene generato è il seguente




ERROR IS:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'isnull' in 'order clause'. The SQL statement executed was: SELECT *, `posizione` AS `IS NULL AS isnull`

FROM `tbl_pagine`

LEFT JOIN `tbl_menu` ON tbl_pagine.id=tbl_menu.tbl_pagine_id

ORDER BY `isnull` ASC, `tbl_menu`.`posizione` ASC



cioè non conosce la colonna isNull, facendo il log leggo che scrive questa query


Querying SQL: SELECT *, `posizione` AS `IS NULL AS isnull`

FROM `tbl_pagine`

LEFT JOIN `tbl_menu` ON tbl_pagine.id=tbl_menu.tbl_pagine_id

ORDER BY `isnull` ASC, `tbl_menu`.`posizione` ASC

che non è proprio la stessa che ho scritto in mySqlWorkbench…perche mi viene modificata?

vedendo poi altre query tipo un findAll() vedo sempre nel log che viene scritta così:


Querying SQL: SELECT * FROM `tbl_pagine` `t`

che cosa è la t ?

Grazie ancora

Beh ti stà dicendo che non esiste nel tuo database una colonna (campo) di nome isnull … prova a cambiare alias … tipo “est_nullo” :huh:

ciao pasquale, si ho provato con altri nomi, il problema è che se io incollo quello che mi restituisce in mySqlWorkbench, non funziona, vedi che mi restituisce proprio due query diverse?

per ora ho fatto un’altra query


$q_pagine = Yii::app()->db->createCommand()

                ->select('*,IFNULL(posizione, 10000) as in_menu')

                ->from('tbl_pagine')

                ->leftJoin('tbl_menu', 'tbl_pagine.id=tbl_menu.tbl_pagine_id')

                ->order('in_menu ASC,tbl_menu.posizione ASC,tbl_pagine.id ASC')

                ->queryall();

dove so che in_menu 10000 non l’avrò mai…ovviamente non mi piace questa soluzione e neanche l’altra :) vorrei una query che senza fare barbatrucchi mi metta i null all’ultimo posto…

… beato te che ti funziona il workbench a me su win7 và in APPCRASH !!! :unsure:

Cmq io proverei a fare un echo di quella query … e poi copia&incolla su phpmyadmin per verificare cosa restituisce…




var_dump(Yii::app()->db->createCommand()

                ->select('*,IFNULL(posizione, 10000) as in_menu')

                ->from('tbl_pagine')

                ->leftJoin('tbl_menu', 'tbl_pagine.id=tbl_menu.tbl_pagine_id')

                ->order('in_menu ASC,tbl_menu.posizione ASC,tbl_pagine.id ASC')

                ->queryall()<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/wink.gif' class='bbc_emoticon' alt=';)' />



sucsami ma la query che mi da è quella che metto in mysqlWorkbench e che appunto non funziona ( se la prendo dal log). La query che ho incollato per ultima funziona, e se faccio il var_dump mi da tutto il risultato della query

forse non ho capito cosa intendevi :)

ps:mysqlWorkbench mi funziona ma ho Mac

grrrrr… :invidia:

Intendevo il var_dump della stringa query, non del risultato restituito. Non sò se con il componente log di Yii si possa monitorare la query(stirnga) :(

p.s.

altra soluzione perlomeno per capire dov’è il problema è

generare la query così:


$command = Yii::app()->db->createCommand('SELECT * FROM tbl_x WHERE condizione blablabla');

Yii logo mi mi restituisce


Querying SQL: SELECT *, `posizione` AS `IS NULL AS isnull`

FROM `tbl_pagine`

LEFT JOIN `tbl_menu` ON tbl_pagine.id=tbl_menu.tbl_pagine_id

ORDER BY `isnull` ASC, `tbl_menu`.`posizione` ASC



che è diversa da quello che scrivo in mySqlWorkBench

il var dump che mi hai consigliato mi scrive riga e valore…

inoltre


Querying SQL: SELECT * FROM `tbl_pagine` `t`

‘t’ che è? :)

Hai provato a scrivere il command tutto su un rigo invece che con il metodo delle freccette ?! :unsure:

no proverò, il problema che non riesco a capire è che mi cambia proprio la query