[Php-avanzado] Consulta entre dos tablas

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Vie Oct 1 13:11:27 ART 2010


Hola Carolina,

	enviá un vuelco con la estructura de estas dos tablas y un par de datos
de prueba, y la vemos entre todos.
	Será cuestión de agregarle alguna condición más, pero está cerca...

El vie, 01-10-2010 a las 13:06 -0300, Silverzero escribió:
> No anda lo que se te habia ocurrido...eso me hace el mismo efecto que
> había hecho anteriormente con 
> 
> SELECT
>             news.id,
>             tit,
>             cop,
>             des,
>             fecha,
>             (SELECT ruta FROM data, news WHERE news.id=id_news
> LIMIT 0,1) as img
>         FROM
>             news
>         LEFT JOIN
>             data
>         ON  news.id = id_news AND tipo = 'img'
>         ORDER by
>             fecha DESC,
>             id DESC
> 
> Ya fué, lo dejo con GROUP BY, más adelante trataré de resolverlo,
> porque seguro en algun momento voy a necesitar listar algo con otro
> algo específico de un grupo en particular.
> 
> 2010/10/1 Leonardo Tadei - Pegasus Tech Supply
> <leonardot en pegasusnet.com.ar>
>         Entonces, una subquery con la forma:
>         
>         SELECT
>                     news.id,
>                     tit,
>                     cop,
>                     des,
>                     fecha,
>                     ruta as img
>                 FROM
>                     news
>                 LEFT JOIN
>                     data
>         
>                 ON  news.id = (SELECT id_news FROM data WHERE
>         news.id=id_news
>         LIMIT 0,1)
>                        AND tipo = 'img'
>                 ORDER by
>                     fecha DESC,
>                     id DESC
>         
>         
>                Es decir, hacés el LEFT JOIN relacionando news.id con
>         el resultado de
>         una query que te devuelve solo un registro de data.
>                Puede ser que haga falta usar algún alias para
>         desambiguar algún campo,
>         pero la idea es esa...
>         
>         El vie, 01-10-2010 a las 09:01 -0300, Silverzero escribió:
>         
>         > Si, DISTINCT tambien lo había probado pero no me
>         funcionó... :/
>         >
>         > 2010/10/1 Leonardo Tadei - Pegasus Tech Supply
>         > <leonardot en pegasusnet.com.ar>
>         >         Ahhh!!!
>         >
>         >         Entonces, sacale el LIMIT que te había dicho, y
>         comenzá la
>         >         query con
>         >         SELECT DISTINCT ...
>         >
>         >                Sin embargo, tal vez esto no funcione porque
>         en
>         >         realidad las filas no
>         >         estarán repetidas cuando haya distintas imágenes...
>         probalo y
>         >         contanos,
>         >         y si no vamos a tener que armar una subquery que
>         devuelva solo
>         >         un
>         >         registro por cada noticia.
>         >
>         >         El vie, 01-10-2010 a las 08:38 -0300, Silverzero
>         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
>         >         --
>         >
>         >         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
>         --
>         
>         
>         Leonardo Tadei
>         leonardot en pegasusnet.com.ar
>         
>         Pegasus Tech Supply
>         Tel: (+54)(+223) 471-2880
>         La Salle 1131 - Mar del Plata - Argentina
>         http://www.pegasusnet.com.ar / http://blog.pegasusnet.com.ar
>         http://www.prometeustech.com.ar / http://www.grupopegasus.com
>         
>         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
-- 

Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado