
13/07/2012, 09:55
|
| | Fecha de Ingreso: octubre-2011 Ubicación: Niquitao
Mensajes: 28
Antigüedad: 13 años, 5 meses Puntos: 0 | |
Respuesta: Pasar nombre de Campo o tabla a una Variable de Usuario en una consulta de Nuevamente los saludo a ustedes 2: gnzsoloyo y leonardo_josue.
Han sido una fuente de ayuda para la consulta que estoy haciendo. Hasta el momento he integrado las 2 funciones, que ustedes dos me han recomendado, usando Stored Preocedure y Sentencias Preparadas. Yo observé la ayuda que le presto gnzsoloyo a diego1311 el 07/12/2010 en el tema Tabla como parámetro en stored procedure. Esté es el link de ese tema http://www.forosdelweb.com/f21/tabla-como-parametro-stored-procedure-866424/
Y basandome en ese ejemplo de verdad que me dio lo que estaba necesitando hasta el momento.
Pero les pido el favor que se devuelvan al 2 mensaje que yo publiqué en el cual les mostré las 3 tablas implicadas con sus registros.
Hice este código y me dio los resultados esperados: DELIMITER $$
DROP PROCEDURE IF EXISTS `leer` $$
CREATE DEFINER=`database` PROCEDURE ` readdata `(IN tabla VARCHAR(100), IN idcampo VARCHAR(50), IN valor INT)
BEGIN
SET @snt = CONCAT('SELECT ' ,tabla,'.* FROM stream INNER JOIN ',tabla ,' ON stream.claveprimaria = ',tabla,'.',idcampo,
' WHERE stream.claveprimaria = ', valor,' AND tabla = ',tabla);
PREPARE sent FROM @snt;
EXECUTE sent;
DEALLOCATE PREPARE sent;
END $$
DELIMITER ;
Ahora observemos lo siguiente, una consulta normal seria esta : SELECT grade.* FROM stream INNER JOIN grade ON stream.claveprimaria = grade.idgrade
WHERE stream.idstream = 20
Y me devolveria este resultado:
idgrade ----- name ------- description
2 ---------- segundo ------ Segundogrado
Si observaron en los datos de la tabla stream, la clave primaria de esta tabla ‘idstream’ tiene los siguientes datos 10 y 20, yo necesito pasarle el 20 a una variable obviamente con esta consulta (select idstream order by campo DESC LIMIT 1) Solo que no tengo muy claro como pasar una consulta a una variable. Para que basándome en el valor que me arroje esa consulta, pueda consultar en el WHERE de la consulta con ese valor.
Como se puede Observar a continuación, lo Traduje a Stored Procedure intentandolo hacer de esta manera:
DELIMITER $$
DROP PROCEDURE IF EXISTS `leer` $$
CREATE DEFINER=`database` PROCEDURE `readdata`(IN tabla VARCHAR(100), IN idcampo VARCHAR(50))
BEGIN DECLARE lastregistry INT;
SET lastregistry = (SELECT idstream FROM stream order by idstream DESC LIMIT 1);
SET @snt = CONCAT('SELECT ' ,tabla,'.* FROM stream INNER JOIN ',tabla ,' ON stream.claveprimaria = ',tabla,'.',idcampo,
' WHERE stream.idstream = ', lastregistry);
PREPARE sent FROM @snt;
EXECUTE sent;
DEALLOCATE PREPARE sent;
END $$
DELIMITER ;
Al llamar el Stored Procedure: call readdata('grade','idgrade') .
Me sale este error: Operand should contain 1 column(s)
Creo que donde esta el problema es aquí: DECLARE lastregistry INT;
SET lastregistry = (SELECT idstream FROM stream order by idstream DESC LIMIT 1);,
sino es hay el problema yo se que ustedes me sabran corregir y me mostraran como hacerlo.
Ah por cierto es muy probable que ustedes me digan que lo haga de esta manera: SELECT grade.* FROM stream INNER JOIN grade ON stream.claveprimaria = grade.idgrade
WHERE stream.idstream IN (SELECT idstream FROM stream order by idstream DESC LIMIT 1)
y yo se que me va a dar el resultado esperado,
pero yo quiero aprender como fijarle una consulta a una variable pues me va ayudar en otras cosas que planeo hacer.
Por lo tanto les pido su cordial ayuda en este punto.
Muchas Gracias y espero su pronta respuesta.
Última edición por elpropiopato23; 13/07/2012 a las 10:59 |