Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Brida en 16 Agosto 2013, 06:11 am



Título: Como sacar nombres y añadir una imagen
Publicado por: Brida en 16 Agosto 2013, 06:11 am
Os comento, tengo una base de datos con una tabla con nombre de alumnos y otra con fotos de esos alumnos. Las tablas son:

alumnos(ID, nombre, apellido);
fotos(ID, ID_alumno, nombre_foto, timestamp);

Lo que he hecho para sacar la información es:

SELECT al.nombre, al.apellidos FROM alumnos al LEFT JOIN fotos fo ON al.ID=fo.ID_alumno

La mayoría de veces me aparece todo perfecto, pero cuando un alumno tiene dos o más fotos el resultado aparece duplicado.

¿Qué solución se os ocurre aparte de usar un GROUP BY la.ID?
Por que creo que debe existir alguna forma mejor ¿no?

¡Gracias!


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: engel lex en 16 Agosto 2013, 06:32 am
supongo que quieres un solo resultado (realmente dices que sale duplicado pero no como quieres que salga, pero aqui dejo esto) puedes usar LIMIT, capypaste de dev.mysql.com

Citar
a cláusula LIMIT puede usarse para restringir el número de registros retornados por el comando SELECT. LIMIT tiene uno o dos argumentos numéricos, que deben ser enteros positivos (incluyendo cero).

Con dos argumentos, el primer argumento especifica el desplazamiento del primer registro a retornar. El desplazamiento del registro inicial es 0 (no 1):

mysql> SELECT * FROM table LIMIT 5,10;  # Retrieve rows 6-15
.
.
.
mysql> SELECT * FROM table LIMIT 5;     # Retrieve first 5 rows

puedes usar LIMIT 1 para obtener un solo registro


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: 1mpuls0 en 16 Agosto 2013, 07:48 am
La mayoría de veces me aparece todo perfecto, pero cuando un alumno tiene dos o más fotos el resultado aparece duplicado.

¿Qué solución se os ocurre aparte de usar un GROUP BY la.ID?
Por que creo que debe existir alguna forma mejor ¿no?

No regresa duplicados xD, coloca el campo fo.nombre_foto y verás, aunque no sé que quieres hacer.
Si necesitas todas las fotos del alumno tu consulta está bien.
Si necesitas la última foto capturada tendrías que hacer lo siguiente.

Código
  1. SELECT * FROM alumnos al INNER JOIN
  2. (SELECT ID_alumno, MAX(TIMESTAMP) FROM fotos GROUP BY ID_alumno) fo
  3. ON al.ID=fo.ID_alumno
  4.  

1. No se que tiene que ver tu consulta con php
2. No utilices palabras reservadas por el motor de base de datos (timestamp)

Saludos.


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: Brida en 16 Agosto 2013, 15:33 pm
Gracias.

Darhius lo que quiero es que salgo sólo una foto.


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: 1mpuls0 en 16 Agosto 2013, 16:26 pm
Pero cuál es esa "solo una" la más reciente, la más antigua?.

Por cierto que datos necesitas en la consulta?, porque en esa que te muestro hay algo "raro" :P y si me dices que campos exactamente requieres puedo ayudarte a arreglarla.


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: Brida en 16 Agosto 2013, 19:22 pm
Pero cuál es esa "solo una" la más reciente, la más antigua?.

Por cierto que datos necesitas en la consulta?, porque en esa que te muestro hay algo "raro" :P y si me dices que campos exactamente requieres puedo ayudarte a arreglarla.

No importa cual, los alumnos salen igual de feos en todas.


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: basickdagger en 16 Agosto 2013, 19:27 pm
utilizando limit 1 ?



Título: Re: Como sacar nombres y añadir una imagen
Publicado por: 1mpuls0 en 16 Agosto 2013, 19:33 pm
No importa cual, los alumnos salen igual de feos en todas.

xDD

Puedes hacerlo utilizando group by
Código
  1. SELECT al.ID AS ID_alumno, al.nombre, al.apellido, fo.ID AS ID_foto, fo.nombre_foto FROM alumnos al
  2. LEFT JOIN fotos fo ON al.ID=fo.ID_alumno GROUP BY al.ID
  3.  

También se puede con distinct deja ver de que forma...

con subconsultas...

Código
  1. SELECT al.ID AS ID_alumno, al.nombre, al.apellido, fo.ID AS ID_foto, fo.nombre_foto FROM alumnos al, fotos fo
  2. WHERE al.ID=fo.ID_alumno GROUP BY al.ID
  3.  


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: Brida en 16 Agosto 2013, 19:53 pm
Vale mil gracias, pensaba que se debía de hacer sin el Group By, pero sin problemas :-P

Gracias!


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: 1mpuls0 en 16 Agosto 2013, 20:00 pm
Entonces te sirve así?.

Por qué no lo quieres hacer con group by?
o solo buscas otra alternativa?.

Es que... olvidé una excepción de distinct con subquerys aunque estoy intentando de otra forma además de group by.


Título: Re: Como sacar nombres y añadir una imagen
Publicado por: Brida en 17 Agosto 2013, 16:37 pm
No, xq creía que usar Group By no era la forma más correcta, pero parece que sí.

Un saludo!