Page 1 of 1
[RESUELTO] - Problemas Ejecutando SQL Tengo problemas haciendo un SET de una variable para una ejecucion de
#1
Posted 31 March 2010 - 11:43 AM
Buenas Tardes mi problema es Simple intento ejecutar una sentencia SQL y me da error, esta es la sentencia SQL:
SET @rownum = 0;
select rank from (SELECT `usda_code`, @rownum:=@rownum+1 rank FROM `user_data` order by `usda_punctuation` desc, `usda_level` desc, `usda_code` asc) as ranking where usda_code=15
Como pueden ver declaro una variable SET @rownum = 0;
Y luego la Uso @rownum:=@rownum+1 rank.
Si ejecuto este SQL en mi consola funciona sin problema pero Yii me da el siguente error:
CDbException
Descripción
CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error
Archivo Fuente:
C:\wamp\www\yii-1.1.0.r1700\framework\db\CDbCommand.php(375)
00363: }
00364:
00365: if($this->_connection->enableProfiling)
00366: Yii::endProfile('system.db.CDbCommand.query('.$this->getText().')','system.db.CDbCommand.query');
00367:
00368: return $result;
00369: }
00370: catch(Exception $e)
00371: {
00372: if($this->_connection->enableProfiling)
00373: Yii::endProfile('system.db.CDbCommand.query('.$this->getText().')','system.db.CDbCommand.query');
00374: Yii::log('Error in querying SQL: '.$this->getText().$par,CLogger::LEVEL_ERROR,'system.db.CDbCommand');
00375: throw new CDbException(Yii::t('yii','CDbCommand failed to execute the SQL statement: {error}',
00376: array('{error}'=>$e->getMessage())));
00377: }
00378: }
00379: }
De ante mano Gracias por la colaboración.
SET @rownum = 0;
select rank from (SELECT `usda_code`, @rownum:=@rownum+1 rank FROM `user_data` order by `usda_punctuation` desc, `usda_level` desc, `usda_code` asc) as ranking where usda_code=15
Como pueden ver declaro una variable SET @rownum = 0;
Y luego la Uso @rownum:=@rownum+1 rank.
Si ejecuto este SQL en mi consola funciona sin problema pero Yii me da el siguente error:
CDbException
Descripción
CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error
Archivo Fuente:
C:\wamp\www\yii-1.1.0.r1700\framework\db\CDbCommand.php(375)
00363: }
00364:
00365: if($this->_connection->enableProfiling)
00366: Yii::endProfile('system.db.CDbCommand.query('.$this->getText().')','system.db.CDbCommand.query');
00367:
00368: return $result;
00369: }
00370: catch(Exception $e)
00371: {
00372: if($this->_connection->enableProfiling)
00373: Yii::endProfile('system.db.CDbCommand.query('.$this->getText().')','system.db.CDbCommand.query');
00374: Yii::log('Error in querying SQL: '.$this->getText().$par,CLogger::LEVEL_ERROR,'system.db.CDbCommand');
00375: throw new CDbException(Yii::t('yii','CDbCommand failed to execute the SQL statement: {error}',
00376: array('{error}'=>$e->getMessage())));
00377: }
00378: }
00379: }
De ante mano Gracias por la colaboración.
#2
Posted 31 March 2010 - 11:58 AM
Que motor estas usando?
Y por otro lado, como estas eecutando el query desde yii?
Podrias mostrarnos un extracto de tu codigo?
Y por otro lado, como estas eecutando el query desde yii?
Podrias mostrarnos un extracto de tu codigo?
Don't say what you think, think what you say
The problem is communication! Excess of communication!
The problem is communication! Excess of communication!
#3
Posted 31 March 2010 - 11:59 AM
PoL, on 31 March 2010 - 11:58 AM, said:
Que motor estas usando?
Y por otro lado, como estas eecutando el query desde yii?
Podrias mostrarnos un extracto de tu codigo?
Y por otro lado, como estas eecutando el query desde yii?
Podrias mostrarnos un extracto de tu codigo?
EL motor es MYSQL
Y la version de Yii es yii-1.1.0.r1700
$data=UserData::model()->findbySql('
SET @rownum = 0;
select rank from (SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc) as ranking where usda_code= '.$usda_code);
return $data->rank;
#4
Posted 31 March 2010 - 12:05 PM
Pienso que tenes el siguiente:
No creo que el PDO permite multiples ejecuciones.
Quiero decir, estas intentando ejecutar dos "instrucciones":
a. SET @rownum = 0;
b. El select.
Por otro lado estoy intrigado con esta parte del query:
SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc
Seguro que es ':=' ??
Nunca use variables seteadas en mysql, po eso pregunto...
No creo que el PDO permite multiples ejecuciones.
Quiero decir, estas intentando ejecutar dos "instrucciones":
a. SET @rownum = 0;
b. El select.
Por otro lado estoy intrigado con esta parte del query:
SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc
Seguro que es ':=' ??
Nunca use variables seteadas en mysql, po eso pregunto...
Don't say what you think, think what you say
The problem is communication! Excess of communication!
The problem is communication! Excess of communication!
#5
Posted 31 March 2010 - 12:07 PM
PoL, on 31 March 2010 - 12:05 PM, said:
Pienso que tenes el siguiente:
No creo que el PDO permite multiples ejecuciones.
Quiero decir, estas intentando ejecutar dos "instrucciones":
a. SET @rownum = 0;
b. El select.
Por otro lado estoy intrigado con esta parte del query:
SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc
Seguro que es ':=' ??
Nunca use variables seteadas en mysql, po eso pregunto...
No creo que el PDO permite multiples ejecuciones.
Quiero decir, estas intentando ejecutar dos "instrucciones":
a. SET @rownum = 0;
b. El select.
Por otro lado estoy intrigado con esta parte del query:
SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc
Seguro que es ':=' ??
Nunca use variables seteadas en mysql, po eso pregunto...
Si PoL, al ejecutar en mi mysql el resultado esta bien
que recomiendas que las ejecute por separado
??
#6
Posted 31 March 2010 - 12:18 PM
Si, proba ejecutandolas por separado:
Aunque no se si va a funcionar...
$connection = Yii::app()->db; $sql = "SET @rownum = 0;"; $command=$connection->createCommand($sql); $command->execute(); // Y despues $data=UserData::model()->findbySql(' SET @rownum = 0; select rank from (SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc) as ranking where usda_code= '.$usda_code); return $data->rank;
Aunque no se si va a funcionar...
Don't say what you think, think what you say
The problem is communication! Excess of communication!
The problem is communication! Excess of communication!
#7
Posted 31 March 2010 - 12:48 PM
PoL, on 31 March 2010 - 12:18 PM, said:
Si, proba ejecutandolas por separado:
Aunque no se si va a funcionar...
$connection = Yii::app()->db; $sql = "SET @rownum = 0;"; $command=$connection->createCommand($sql); $command->execute(); // Y despues $data=UserData::model()->findbySql(' SET @rownum = 0; select rank from (SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc) as ranking where usda_code= '.$usda_code); return $data->rank;
Aunque no se si va a funcionar...
Hola PoL, tu solución no funciono pero si me dio una Idea. Muchas Gracias.
la solución fue:
$fisrt=UserData::model()->findbySql('select @rownum:=0 from dual');
$data=UserData::model()->findbySql('
select rank from (SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc) as ranking where usda_code= '.$usda_code);
return $data->rank;
#8
Posted 31 March 2010 - 01:11 PM
Bueno, lo imporante es que lo resolviste!!! 
P.D.: Bienvenido al foro!!!

P.D.: Bienvenido al foro!!!
Don't say what you think, think what you say
The problem is communication! Excess of communication!
The problem is communication! Excess of communication!
#9
Posted 24 June 2010 - 02:46 PM
Hola, jamfranco...
La respuesta ya es un poco tardía, pero para la próxima vez podés intentar lo siguiente para no tener que ejecutar dos sentencias:
ANTES:
DESPUÉS:
La respuesta ya es un poco tardía, pero para la próxima vez podés intentar lo siguiente para no tener que ejecutar dos sentencias:
ANTES:
SET @rownum = 0; select rank from ( SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data order by usda_punctuation desc, usda_level desc, usda_code asc ) as ranking where usda_code= '.$usda_code);
DESPUÉS:
select rank from ( SELECT usda_code, @rownum:=@rownum+1 rank FROM user_data, (select (@rownum := 0)) as lag order by usda_punctuation desc, usda_level desc, usda_code asc ) as ranking where usda_code= '.$usda_code);
Share this topic:
Page 1 of 1