Ver Mensaje Individual
  #6 (permalink)  
Antiguo 08/10/2013, 13:23
Avatar de gnzsoloyo
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: Listado completo con relación 1:n

OK, Ahora se entiende mejor...
Lo que quieres es la lista completa de personas, se tengan o no detalles.

Eso sería un LEFT JOIN, pero el problema que le veo es que no tienes una tabla normalizada. La tabla de datos_usuario, en principio, es una tabla de tipo taxonómica, aparentemente diseñada con el mismo aspecto de las de Wordpress. Ese tipo de tablas no sirve para ser usadas en consultas como las que planteas, porque no se ajustan al modelo relacional.
Para que se entienda un poco mejor: Esas tablas son "bolsas de datos", donde se agrupan todas las cosas sin respetar dominios, y como no se tiene una limitación de las tipologías de datos (campo nombre_dato), no se puede establecer cuántos INNER JOIN se deben indicar, ni cual será el parámetro de cada uno.

La recuperación de datos de esa clase se hace por una combinación entre SQL y programación. Pero no medio de SQL puro.
Se puede intentar una query que devuelva esas tres columnas de datos, pero no será sencillo:
Código MySQL:
Ver original
  1. SELECT u.id, u.nombre, d.Provincia, d.ciudad, d.telefono
  2. FROM usuario u LEFT JOIN
  3.     (SELECT d1.usuarioid, d1.valor_dato Provincia, d2.valor_dato ciudad, d3.valor_dato telefono
  4.        FROM datos_usuario d1
  5.             INNER JOIN datos_usuario d2 ON d1.usuarioId = d2.usuarioId
  6.             INNER JOIN datos_usuario d2 ON d1.usuarioId = d3.usuarioId
  7.       WHERE d1.nombre_dato = 'provincia' AND d2.nombre_dato = 'ciudad' AND d3.nombre_dato = 'telefono') d ON u.id = d.usuarioid;
Por cada columna extra, la tabla derivada deberá incluir otro nivel de INNER JOIN, con su respectivo parámetro de nombre_dato.

Como verás, se complica bastante.

En realidad el problema es que la tabla datos_usuario debería tener una columna por cada atributo de detalle que exista. Eso es lo que debería existir, y no esa "bolsa de datos".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)