Yii Framework Forum: [RESUELTO] - Problemas Ejecutando SQL - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[RESUELTO] - Problemas Ejecutando SQL Tengo problemas haciendo un SET de una variable para una ejecucion de Rate Topic: -----

#1 User is offline   jamfranco 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 02-February 10

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.
0

#2 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

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?
Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#3 User is offline   jamfranco 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 02-February 10

Posted 31 March 2010 - 11:59 AM

View PostPoL, 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?


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;
0

#4 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

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...


Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#5 User is offline   jamfranco 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 02-February 10

Posted 31 March 2010 - 12:07 PM

View PostPoL, 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...





Si PoL, al ejecutar en mi mysql el resultado esta bien
que recomiendas que las ejecute por separado
??
0

#6 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 31 March 2010 - 12:18 PM

Si, proba ejecutandolas por separado:

$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!
0

#7 User is offline   jamfranco 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 4
  • Joined: 02-February 10

Posted 31 March 2010 - 12:48 PM

View PostPoL, on 31 March 2010 - 12:18 PM, said:

Si, proba ejecutandolas por separado:

$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;
0

#8 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 31 March 2010 - 01:11 PM

Bueno, lo imporante es que lo resolviste!!! :D

P.D.: Bienvenido al foro!!!
Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#9 User is offline   cm5775 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 24-June 10
  • Location:Medellín, Colombia

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:
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);

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users