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

Problema con Select y mysql_fetch_array

Estas en el tema de Problema con Select y mysql_fetch_array en el foro de Mysql en Foros del Web. Buenas Tengo un problema al realizar un select, ya que me devulve datos que no debería devolver y que además ni siquiera existen dentro de ...
  #1 (permalink)  
Antiguo 07/07/2015, 11:47
Avatar de lisamolinad  
Fecha de Ingreso: mayo-2015
Mensajes: 13
Antigüedad: 9 años, 5 meses
Puntos: 0
Pregunta Problema con Select y mysql_fetch_array

Buenas

Tengo un problema al realizar un select, ya que me devulve datos que no debería devolver y que además ni siquiera existen dentro de la b.d.

SQL:
Código SQL:
Ver original
  1. SELECT * FROM semestres, secciones, materias
  2. WHERE semestres.cedula_identidad='$cedula_identidad'
  3. AND secciones.cedula_identidad='$cedula_identidad'
  4. AND materias.cedula_identidad='$cedula_identidad'

Esta consulta la toma un mysql_fetch_array, de la siguiente manera:
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.

Pero me da ese error, no estoy muy segura de que esta mal, o de que otra forma se podría realizar esta consulta, lo que busco es que me imprima esos datos según el número de cedula que es foranea en cada tabla de las anteriormente nombradas.

Última edición por gnzsoloyo; 07/07/2015 a las 12:03
  #2 (permalink)  
Antiguo 07/07/2015, 12:09
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: Problema con Select y mysql_fetch_array

Cita:
Tengo un problema al realizar un select, ya que me devulve datos que no debería devolver y que además ni siquiera existen dentro de la b.d.
Eso no existe. SI los datos no están en la base, no puede devolverlos... La base de datos y el SQL no inventan datos de la nada.
Lo que puede ser es que no den loa datos esperados porque la consulta esté mal redactada.

Por lo pronto, estás haciendo un producto cartesiano, porque no estás relacionando las tablas.

Código SQL:
Ver original
  1. SELECT *
  2. FROM semestres, secciones, materias
  3. WHERE semestres.cedula_identidad= secciones.cedula_identidad
  4.     AND secciones.cedula_identidad = materias.cedula_identidad
  5.     AND materias.cedula_identidad='$cedula_identidad';
O mejor aún:
Código SQL:
Ver original
  1. SELECT *
  2. FROM semestres SE
  3.     INNER JOIN secciones SC ON SE.cedula_identidad = SC.cedula_identidad
  4.     INNER JOIN materias M ON SC.cedula_identidad = M.cedula_identidad
  5. WHERE M.cedula_identidad='$cedula_identidad';


TE recomiendo volver a leer un manual basico de SQL, porque esto es un error habitual en los primeros pasos del SQL y los JOIN (implícitos o explícitos)
__________________
¿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 07/07/2015, 12:21
Avatar de lisamolinad  
Fecha de Ingreso: mayo-2015
Mensajes: 13
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Problema con Select y mysql_fetch_array

Al realizar el select de la manera anterior, o con el INNER JOIN, me devulve lo mismo, valores duplicados de los dos registros que debería mostrar, los duplica y además los mezcla, no sé si sea algo con el SELECT o el mysql_fetch_array. Ya lo había intentado de una manera similar con el INNER JOIN y nada de nada.
  #4 (permalink)  
Antiguo 07/07/2015, 13:44
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: Problema con Select y mysql_fetch_array

Cita:
Iniciado por lisamolinad Ver Mensaje
Al realizar el select de la manera anterior, o con el INNER JOIN, me devulve lo mismo, valores duplicados de los dos registros que debería mostrar, los duplica y además los mezcla, no sé si sea algo con el SELECT o el mysql_fetch_array. Ya lo había intentado de una manera similar con el INNER JOIN y nada de nada.
No. Ni mezcla ni revuelve. Lo que no estás entendiendo e la lógicxa de un JOIN en una relación N:M o 1:N.
Por empezar: las dos sentencias que te puse son semánticamente idénticas, solo se diferencian en la performance. No en el resultado.

Por otro lado, debes tener claro que una consulta que relaciona dos o más tablas que tienen una relación 1:N, devolverá N veces cada registro de la primera tabla por cada uno de los registros que se relacionan en la segunda.
Es decir que si la primera tabla (semestres) se relacionase con 20 registros de la segunda (secciones), ese primer JOIN devolverá veinte (20) veces los datos de cada semestre por cada una de las secciones donde existe una relación.
Pero como además estás relacionado una tercera tabla (materia) con la segunda, esto se repite, y si cada registro de la segunda se relacionase con cinco (5) de la tercera, el resultado sería una tabla de cien (100) registros, cien veces lo de la primera y cinco veces cada variable de la segunda, mas cinco grupos de registros diferentes de la tercera.
¿Se va entendiendo?

Bueno, e problema central es que para que te devuelva solo los datos de un único numero de cedula de identidad, y sólo te entregase un único registro, debería suceder que exista un único registro en cada tabla donde ese numero exista.

¿Eso sucede?

Probablemente no. Si no nos muestras los datos que obtienes es imposible comprobarlo, pero es seguro que el tema es un problema de datos.
La base de datos, te insisto, no inventa ni crea cosas. Si los datos no son los que esperas es porque las condiciones del WHERE no son suficientemente restrictivas, o bien porque las relaciones o el diseño de las tablas está mal hecho, e incluso peude ser que haya datos sucios.
Pero no es el SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/07/2015 a las 13:52

Etiquetas: mysql_fetch_array, php, select
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 01:13.