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

Como mostrar los datos correctamente en una consulta

Estas en el tema de Como mostrar los datos correctamente en una consulta en el foro de Mysql en Foros del Web. Hola a todos!! Mi problema es acerca de las consultas mysql. Tengo esta consulta a partir de 4 tablas: usuario tbsexo tbperfil tbsucursal, a b ...
  #1 (permalink)  
Antiguo 07/09/2011, 15:36
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 13 años, 6 meses
Puntos: 3
Pregunta Como mostrar los datos correctamente en una consulta

Hola a todos!!

Mi problema es acerca de las consultas mysql. Tengo esta consulta a partir de 4 tablas: usuario tbsexo tbperfil tbsucursal, a b c d respectivamente...

Ejecuto la consulta:

Código MySQL:
Ver original
  1. select a.idusuario, a.nombres, a.apellidos, a.direccion, a.fechanacimiento, a.login, a.password, a.facebook, a.twitter, a.email, a.imagen, b.nombre, c.nombre, residencia, fecharegistro, d.nombre from usuario a, tbsexo b, tbperfil c, tbsucursal d where a.idsexo = b.idsexo and a.idperfil = c.idperfil and a.idsucursal = d.idsucursal and a.idusuario = '1118293671' or a.login = '1118293671' group by a.idusuario

Despues de ejecutar esa consulta me arroja bien los datos en phpmyadmin.

Por ejemplo: b.nombre = 'Masculino' , etc los datos correctos.

Pero al hacer la consulta en php y sacar los datos me salen los primeros nombres de las tablas tbsexo tbperfil tbsucursal

Por ejemplo:

en phpmyadmin devuelve:

b.nombre = 'Masculino'

pero en la extraccion de datos con PHP devuelve:
b.nombre = 'Femenino' el primer nombre correspondiente al idsexo 1....

me explico?

aun cuando el usuario tiene idsexo = 2 es decir Masculino, al hacer la consulta con PHP sale 'Femenino'

ayuda!!
  #2 (permalink)  
Antiguo 08/09/2011, 02:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Como mostrar los datos correctamente en una consulta

Código MySQL:
Ver original
  1. SELECT a.idusuario,
  2.              a.nombres,
  3.              a.apellidos,
  4.              a.direccion,
  5.              a.fechanacimiento,
  6.              a.login,
  7.              a.password,
  8.              a.facebook,
  9.              a.twitter,
  10.              a.email,
  11.              a.imagen,
  12.              b.nombre,
  13.              c.nombre,
  14.              residencia,
  15.              fecharegistro,
  16.              d.nombre
  17. FROM usuario a,
  18.           tbsexo b,
  19.           tbperfil c,
  20.           tbsucursal d
  21. WHERE a.idsexo = b.idsexo
  22.      AND a.idperfil = c.idperfil
  23.      AND a.idsucursal = d.idsucursal
  24.      AND a.idusuario = '1118293671'
  25.      OR a.login = '1118293671'
  26. GROUP BY a.idusuario

Primero esa consulta funciona???!?!?!? Hay muchos campos que no estan en el group by y tampoco son funciones de agregado....????

Si funciona debe dar lo mismo excepte que la programacion en php no este bien, pero no nos la muestras y ademas deberias preguntar en php no wn bbdd.

Intenta esto a ver si te funciona mejor...

Código MySQL:
Ver original
  1. SELECT a.idusuario,
  2.              a.nombres,
  3.              a.apellidos,
  4.              a.direccion,
  5.              a.fechanacimiento,
  6.              a.login,
  7.              a.password,
  8.              a.facebook,
  9.              a.twitter,
  10.              a.email,
  11.              a.imagen,
  12.              b.nombre,
  13.              c.nombre,
  14.              residencia,
  15.              fecharegistro,
  16.              d.nombre
  17. FROM (((usuario a INNER JOIN tbsexo b ON  a.idsexo = b.idsexo)
  18.                             INNER JOIN tbperfil c ON a.idperfil = c.idperfil)
  19.                             INNER JOIN tbsucursal d  ON a.idsucursal = d.idsucursal)
  20. WHERE a.idusuario = '1118293671'
  21.      OR a.login = '1118293671'

agregando los alias que faltan en residencia y fecharegistro.

WHERE a.idusuario = '1118293671' OR a.login = '1118293671'

esto tiene sentido?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 08/09/2011, 07:29
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: Como mostrar los datos correctamente en una consulta

El GROUP BY funciona algo distinto en MySQL que en los otros DBMS (ver en manual).
MySQL sí acepta poner en el GROUP BY campos que no están en el SELECT, e incluso poner sólo parte de ellos. El tema que debe considerarse es que en ese caso devolverá en esas columnas los valores correspondientes al primer registro encontrado que cumpla con las otras condiciones (FROM, WHERE, GROUP BY), y descartará todo otro valor encontrado.
Por eso es crucial saber si el registro que aparezca en primera instancia es realmente el que se busca, o si el orden para que aparezca debe ser diferente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 09/09/2011, 01:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Como mostrar los datos correctamente en una consulta

Pues en la aclaracion de gnzsoloyo podriamos tener la explicación a l problema, en el manual se puede leer

Cita:
....
No use esta característica si las columnas que omite de la parte GROUP BY no son únicos en el grupo! Obtendría resultados impredecibles.
....
Ahora bien que sentido tiene usar un group by sobre un identificador unico, si los registros son únicos no se va a agrupar nada.... en este caso a.idusuario

Claro que si con GROUP BY a.idusuario no se obtienen grupos de un solo registro tenemos un problema de diseño...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 09/09/2011 a las 02:31

Etiquetas: consultas_mysql, error_php
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 13:47.