Foros del Web » Programando para Internet » PHP »

Problema Insert

Estas en el tema de Problema Insert en el foro de PHP en Foros del Web. Hola a todos! buenas tardes. Bueno mi problema es con el INSERT y una query. Me explico: Tengo la siguiente query: Código PHP: select u . ...
  #1 (permalink)  
Antiguo 12/05/2012, 15:59
 
Fecha de Ingreso: abril-2012
Ubicación: Chile
Mensajes: 5
Antigüedad: 12 años
Puntos: 0
Problema Insert

Hola a todos! buenas tardes. Bueno mi problema es con el INSERT y una query. Me explico: Tengo la siguiente query:

Código PHP:
select u.idmdl_groups.id
from moodle
.mdl_groupsmdl_user_enrolments as ue
inner join mdl_enrol 
as e on (e.courseid=and e.enrol 'meta' and e.id ue.enrolid)
inner join mdl_course as c on (e.customint1 c.id)
inner join mdl_user as u on (ue.userid u.id)
inner join mdl_course c2 on (e.courseid c2.id)
where mdl_groups.name=c.shortname 
La cual me arroja los siguientes resultados:



Luego quiero ejecutar un insert de la siguiente forma:

Código PHP:
while ($igualar=mysql_fetch_array($igualacion)){


$sql2=mysql_query("INSERT INTO `moodle`.`mdl_groups_members` (`groupid`, `userid`) 
//VALUES ({$igualar['mdl_groups.id']},{$igualar['u.id']});"
,$conexion) or die ("Problemas en insertar usuarios a grupos:".mysql_error());

Y ahí esta el problema me tira error. Hice un echo para ver lo que me estaba arrojando y el problema pareciera que está en la query, pq como "id" solo me reconoce mdl_groups.id y el otro no. Y la idea es que por cada fila me introduzca las 2 id que resultan de la query. De ante manos muchas gracias! saludos!
  #2 (permalink)  
Antiguo 12/05/2012, 17:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema Insert

Es un conflicto mezclado entre MySQL y PHP.
El problema básico es que no reconoce los encabezados de las columnas devueltas, porque la tabla referenciada no va incluida en ellos.
Me explico.
Si puedes ver tu propia muestra, lo que tienes es esto:


Si te fijas, MySQL no devuelve los nombres de los campos con la tabla que se referencia en el SELECT ("u." y "mdl_groups"). Esto ocurre con cualquiera de los DBMS que puedes usar, es un comportamiento estándar y no implica error alguno.
Lo que algunos DBMS hacen (Oracle), es que al segundo campo le van agregando un sufijo numerado cuando el nombre del campo se repite (id, id1, id2, etc.). Pero no es el caso de MySQL.
Esto hace que no puedas invocar a esos campos por el mismo nombre aparente del SELECT, sino por el que MySQL devuelve, que en este caso está duplicado.

¿Cuál es la solución?
La que puedes usar es crearle alias en el SELECT.
La correcta sería no usar nombres de campos iguales en diferentes tablas, sino crearlos de modo que se pueda identificar de forma simple a qué tabla pertenecen (id_users, idEmpleados, idPais, etc.). Eso es lo que se considera buena práctica en BBDD.

Código MySQL:
Ver original
  1.     u.id user_id,
  2.     mdlgr.id mdlgr_id
  3.     moodle.mdl_groups mdlgr...

Por ciero, el orden de las tablas parece estar equivocado. Primero debe ir la tabla base, que en principio parecería ser mdl_user y no mdl_groups. Pero eso depende de sobre qué quieres haerla, si sobre los grupos, o sobre los usuarios.

Eso lo sabes tu.
__________________
¿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 12/05/2012, 18:09
 
Fecha de Ingreso: abril-2012
Ubicación: Chile
Mensajes: 5
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema Insert

gnzsoloyo mejor explicación no hay. Muchas gracias me resultó y además aclaré dudas respecto al problema. Saludos

Etiquetas: insert, sql, usuarios
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 12:39.