[Php-avanzado] Consulta entre dos tablas
Matias Gea
matigea en gmail.com
Vie Oct 1 08:56:29 ART 2010
Hola, Carolina.
Cuando hacés un GROUP BY el criterio de seleccion de los campos es, en
general, el primero que encuentra con el índice que está usando para unir
las tablas. En la práctica, te trae los campos que se le ocurren (hablamos
de los campos con join, por supuesto). La forma más eficiente es asignarle
un campo "principal" (booleano) a una imagen en particular (que puede ser
elegida manualmente o que sea la primera que se inserta) y después, en el
join, especificarle que busque esa imagen, es decir:
LEFT JOIN data
ON news.id=data.id_news
AND data.tipo='img'
AND data.principal=1
De esa forma te va a traer la imagen que vos quieras.
Saludos!
El 1 de octubre de 2010 08:38, Silverzero <silverzero.52 en gmail.com>escribió:
> Si, pero en ese caso me lista una noticia sola, no?.
> Yo quiero un listado completo de noticias por página, en donde cada noticia
> se muestra con ninguna (si no tuviese) o sólo una imagen, para que luego se
> pueda seleccionar una y ver todo el contenido completo.
>
>
> 2010/10/1 Leonardo Tadei - Pegasus Tech Supply <
> leonardot en pegasusnet.com.ar>
>
>> Hola Carolina,
>>
>> si solo querías la primer imagen, tu 1er query estaba bien, solo
>> que al
>> final tenías que agregarle un LIMIT 0,1
>>
>> El LIMIT es a toda la query...
>>
>> El vie, 01-10-2010 a las 07:30 -0300, Silverzero escribió:
>> > No, solo una. Porque es para el listado de todas las noticias, y
>> > queria que se mostrara cada una con una imagen de todas las que
>> > tuviera asociadas (hubiera sido ideal la de menor ID).
>> >
>> > 2010/10/1 Leonardo Tadei - Pegasus Tech Supply
>> > <leonardot en pegasusnet.com.ar>
>> > Pero esa query no te devuelve todas las imágenes... no te
>> > hacían falta
>> > todas???
>> >
>> > El vie, 01-10-2010 a las 00:24 -0300, Silverzero escribió:
>> >
>> > > Hola Leo,
>> > >
>> > > Gracias por la respuesta.
>> > > Lo arreglé así:
>> > >
>> > > $qry="SELECT
>> > > news.id,
>> > > tit,
>> > > cop,
>> > > des,
>> > > fecha,
>> > > ruta as img
>> > > FROM
>> > > news
>> > > LEFT JOIN
>> > > data
>> > > ON
>> > > news.id = id_news AND tipo = 'img'
>> > > GROUP BY
>> > > news.id
>> > > ORDER by
>> > > fecha DESC,
>> > > id DESC";
>> > >
>> > > Lo único es que me elige una imagen a criterio desconocido,
>> > pero me da
>> > > la impresión que es una con el id intermedio porque nunca es
>> > la mayor
>> > > ni la menor.
>> > >
>> > > 2010/9/30 Leonardo Tadei - Pegasus Tech Supply
>> > > <leonardot en pegasusnet.com.ar>
>> > > Hola Carolina,
>> > >
>> > > El jue, 30-09-2010 a las 21:07 -0300, Silverzero
>> > escribió:
>> > > > Hola tengo un problema con una consulta a dos
>> > tablas (que
>> > > seguro es
>> > > > una pavada y yo no la veo), en una tengo noticias
>> > y en otra
>> > > guardo
>> > > > archivos, videos e imagenes de cada noticia, que
>> > pueden ser,
>> > > ninguna o
>> > > > más de una.
>> > > > Cuando listo las noticias quiero que se vea UNA de
>> > las fotos
>> > > (la de ID
>> > > > menor), titulo, fecha, copete/desarrollo. Pero
>> > cuando una
>> > > noticia
>> > > > tiene más de una imagen me lista la noticia
>> > repetida tantas
>> > > veces como
>> > > > imágenes haya asociadas.
>> > >
>> > >
>> > > Esto está bien, y es como se espera que
>> > funcione una
>> > > query: creciendo
>> > > "para abajo" con tantos registros como datos tenga
>> > la
>> > > respuesta.
>> > > Por lo que planteás, es como que esperás que
>> > la
>> > > respuesta "se más
>> > > ancha", es decir, tenga más columnas, pero nunca vas
>> > a tener
>> > > más
>> > > columnas que las que estés proyectando.
>> > >
>> > > La solución a aplicar es programática: en la
>> > primer
>> > > iteración de la
>> > > query, rescatá los datos de News, y de la 1ra y las
>> > > siguientes, usá solo
>> > > los datos proyectados de Data.
>> > >
>> > >
>> > > > Mi consulta original es
>> > > >
>> > > > $qry="SELECT
>> > > > news.id,
>> > > > tit,
>> > > > cop,
>> > > > des,
>> > > > fecha,
>> > > > ruta as img
>> > > > FROM
>> > > > news
>> > > > LEFT JOIN
>> > > > data
>> > > > ON
>> > > > news.id = id_news AND tipo = 'img'
>> > > > ORDER by
>> > > > fecha DESC,
>> > > > id DESC";
>> > > >
>> > > > Había probado hacer una consulta anidada en
>> > reemplazo de
>> > > ruta as img,
>> > > > por SELECT ruta FROM news, data WHERE news.id =
>> > id_news AND
>> > > tipo =
>> > > > 'img' LIMIT 0,1, para que me devuelva una sola,
>> > pero se me
>> > > repite la
>> > > > misma imagen en cada noticia...
>> > > >
>> > > > Gracias
>> > >
>> > >
>> > > Por nada!
>> > > (si se entiende)
>>
>> >
>> --
>>
>> Leonardo Tadei
>> leonardot en pegasusnet.com.ar
>> http://blog.pegasusnet.com.ar
>> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>>
>> _______________________________________________
>> Php-avanzado mailing list
>> Php-avanzado en pato2.fi.mdp.edu.ar
>> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>>
>
>
>
> --
> Carolina Derromediz
> Cel. +54 223 5301599
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
--
Matias Fernando Gea
matigea en gmail.com
http://www.mfgea.com.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20101001/a935405d/attachment.htm
Más información sobre la lista de distribución Php-avanzado