Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Creando tablas temporales

Estas en el tema de Creando tablas temporales en el foro de Mysql en Foros del Web. Hola. Tengo un problema. Estoy creando tablas temporales para unos reportes que hago con fpdf, aunque cuando inlcuí la línea para crear la tabla, me ...
  #1 (permalink)  
Antiguo 16/08/2010, 10:08
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 15 años, 4 meses
Puntos: 2
Exclamación Creando tablas temporales

Hola.

Tengo un problema.

Estoy creando tablas temporales para unos reportes que hago con fpdf, aunque cuando inlcuí la línea para crear la tabla, me marca el siguiente error:

Parse error: syntax error, unexpected T_STRING in C:\AppServ\www\appserv\...reportes_ag.php on line 63

Exactamente donde inluí la línea:
Código PHP:
    $tablanueva=@create temporary table tmpcues("idrfc varchar(13) not null, idcarrera varchar(4) not null, idasig varchar(4) not null, idgrupo varchar(4) not null, tipogrupo char(1), idcuenta varchar(9) not null, no_preg char(2) not null, respuesta char(2) not null, periodo varchar(5), fecha_hora datetime"); 
No sé cual sea el error, quizá no sea posible crear tablas desde fpdf...

Gracias por sus respuestas y tiempo :D
  #2 (permalink)  
Antiguo 16/08/2010, 10:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Creando tablas temporales

Las comillas están de más...
Quítalas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 16/08/2010, 10:35
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Creando tablas temporales

Gracias gnzsoloyo :)

Lo resolví así:
Código PHP:
$sql=@"CREATE TEMPORARY TABLE 'tmpcues'('idrfc' varchar(13) not null, 'idcarrera' varchar(4) not null, 'idasig' varchar(4) not null, 'idgrupo' varchar(4) not null, 'tipogrupo' char(1), 'idcuenta' varchar(9) not null, 'no_preg' char(2) not null, 'respuesta' char(2) not null, 'periodo' varchar(5), 'fecha_hora' datetime)"
Ahora tendré que llenarla... :D
  #4 (permalink)  
Antiguo 16/08/2010, 10:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Creando tablas temporales

Ten cuidado con el uso de apóstrofes (') son para encerrar cadenas de texto y no para los nombres de los objetos de base de datos. Pueden traerte problemas.
Losestás confundiendo con los acentos invertidos (`).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/08/2010, 08:39
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Creando tablas temporales

Cierto, los quité:
Código PHP:
$sql="CREATE TEMPORARY TABLE tmpcues (idrfc varchar(13) not null, idcarrera varchar(4) not null, idasig varchar(4) not null, idgrupo varchar(4) not null, tipogrupo char(1), idcuenta varchar(9) not null, no_preg char(2) not null, respuesta char(2) not null, periodo varchar(5), fecha_hora datetime);"
Pero ahora otro detalle, en el php myadmin, hago lo siguiente:

Código PHP:
CREATE TEMPORARY TABLE tmpcues (idrfc varchar(13not nullidcarrera varchar(4not nullidasig varchar(4not nullidgrupo varchar(4not nulltipogrupo char(1), idcuenta varchar(9not nullno_preg char(2not nullrespuesta char(2not nullperiodo varchar(5), fecha_hora datetime);

insert into tmpcues (idrfcidcarreraidasigidgrupotipogrupoidcuentano_pregrespuestaperiodofecha_horaselect idrfcidcarreraidasigidgrupotipogrupoidcuentano_pregrespuestaperiodofecha_hora from evaluaciones where idrfc='camp851123snl' and idasig='1003' and idcarrera='308' and idgrupo='11A' and periodo='20102';

select count(distinct idcuentafrom tmpcues where idrfc='camp851123snl' and idasig='1003' and idcarrera='308' 
Y si me hace la consulta, aunque sea una tabla temporal.
Pero si hago lo mismo en el script del fpdf, no me funciona nada:
Código PHP:
$sql="CREATE TEMPORARY TABLE tmpcues (idrfc varchar(13) not null, idcarrera varchar(4) not null, idasig varchar(4) not null, idgrupo varchar(4) not null, tipogrupo char(1), idcuenta varchar(9) not null, no_preg char(2) not null, respuesta char(2) not null, periodo varchar(5), fecha_hora datetime);";

$llena_tabla=@mysql_query("insert into tmpcues (idrfc, idcarrera, idasig, idgrupo, tipogrupo, idcuenta, no_preg, respuesta, periodo, fecha_hora) select idrfc, idcarrera, idasig, idgrupo, tipogrupo, idcuenta, no_preg, respuesta, periodo, fecha_hora from evaluaciones where idrfc='camp851123snl' and idasig='1003' and idcarrera='308'  and idgrupo='11A' and periodo='20102'");

$noal=@mysql_query("select count(distinct idcuenta) from tmpcues where idrfc='camp851123snl' and idasig='1003' and idcarrera='308'");
    
$num_alumnos=@mysql_fetch_array($noal); 
$num_alumnos me da 0, o mejor dicho no me da nada. ya hice un:
Código PHP:
$basura=var_dump($num_alumnos[0]); 
y me arroja como resultado NULL :(
  #6 (permalink)  
Antiguo 17/08/2010, 09:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Creando tablas temporales

Primero, asegurate que la sentencia que usas para cargar, realmente devuelva algún dato:
Código MySQL:
Ver original
  1.    idrfc,
  2.    idcarrera,
  3.    idasig,
  4.    idgrupo,
  5.    tipogrupo,
  6.    idcuenta,
  7.    no_preg,
  8.    respuesta,
  9.    periodo,
  10.    fecha_hora
  11.    evaluaciones
  12.    idrfc='camp851123snl' AND
  13.    idasig='1003' AND
  14.    idcarrera='308'  AND
  15.    idgrupo='11A'
  16.    AND periodo='20102';
De lo contrario, la tabla estará vacía. Ese suele ser el problema más habitual.

En segundo lugar, ten cuidado con el cierre de conexiones. Las tablas temporales dejan de existir cuando cierras la conexión.
Manual de referencia: CREATE TABLE
Cita:
Puede usar la palabra TEMPORARY al crear una tabla. Una tabla TEMPORARY es visible sólo para la conexión actual, y se borra automáticamente cuando la conexión se cierra. Esto significa que dos conexiones distintas pueden usar el mismo nombre de tabla temporal sin entrar en conflicto entre ellas ni con tablas no TEMPORARY con el mismo nombre. (La tabla existente se oculta hasta que se borra la tabla temporal.)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/08/2010, 10:04
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Creando tablas temporales

Hola de nuevo gnzsoloyo :) gracias por tu interés.

He leído otros temas de este foro acerca de las tablas temporales. Quizá deba en la declaración de la creación de la tabla, establecer ENGINE = MEMORY

Ya comprobé que el select:
Código PHP:
SELECT idrfcidcarreraidasigidgrupotipogrupoidcuentano_pregrespuestaperiodofecha_hora
FROM evaluaciones
WHERE idrfc 
=  'camp851123snl'
AND idasig =  '1003'
AND idcarrera =  '308'
AND idgrupo =  '11A'
AND periodo =  '20102' 
me arroja resultado, inlcuso en el phpmyadmin, pero no logro entender por qué la tabla no se llena.

Investigué un poco en internet e igual que el comentario que hiciste del cierre de conexión (mysql_close), encontré que debía comentar cualquier mysql_free_result que tuviera, he comentado estas líneas y sigo en lo mismo.

Será por el fpdf o estaré creando mal la tabla. Intentaré con el ENGINE = MEMORY a ver que tal.

Gracias :)
  #8 (permalink)  
Antiguo 17/08/2010, 10:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Creando tablas temporales

Tal ves esté entrando un valor como NULL, y como los campos de la tabla están definidos como NOT NULL, eso no lo permita ingresar.
Habría hacer las dos cosas en una sola.
Usa esta forma y veamos:
Código MySQL:
Ver original
  1.   idrfc,
  2.   idcarrera,
  3.   idasig,
  4.   idgrupo,
  5.   tipogrupo,
  6.   idcuenta,
  7.   no_preg,
  8.   respuesta,
  9.   periodo,
  10.   fecha_hora
  11. FROM evaluaciones
  12.   idrfc='camp851123snl' and
  13.   idasig='1003' and
  14.   idcarrera='308'  and
  15.   idgrupo='11A' and
  16.   periodo='20102';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 17/08/2010, 10:58
Avatar de venom_mau  
Fecha de Ingreso: julio-2009
Mensajes: 152
Antigüedad: 15 años, 4 meses
Puntos: 2
Respuesta: Creando tablas temporales

Toda la razón gnzsoloyo me equivoqué al declarar en la tabla algunos campos not null.

Pero con tu línea (arreglandola para que funcione en fpdf ya ves como es ;) ):
Código PHP:
$mia=mysql_query("CREATE TEMPORARY TABLE tmpcues AS SELECT idrfc, idcarrera, idasig, idgrupo, tipogrupo, idcuenta, no_preg, respuesta, periodo, fecha_hora FROM evaluaciones WHERE idrfc='camp851123snl' AND idasig='1003' AND idcarrera='308' AND idgrupo='11A' AND periodo='20102'"); 
Quedó perfecta, ahora seguiré haciendo pruebas sobre esa tabla, por ahora ya me arroja unos datos con esta línea:
Código PHP:
    $noal=@mysql_query("select count(distinct idcuenta) from tmpcues  where idrfc='camp851123snl' and idasig='1003' and idcarrera='308'");
    
$num_alumnos=@mysql_fetch_array($noal); 
Mil gracias!!! :D

Etiquetas: tablas, temporales
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:05.