[Php-avanzado] Consulta entre dos tablas

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Sab Oct 23 00:23:48 ARST 2010


Hola Carolina,

	tenía este e-mail dando vueltas hace rato, pero sin tiempo de jugar un
rato con los datos.

	Para estas tablas, y si no recuerdo mal, lo que había que proyectar
era: todas las noticias con el primer "data" que tengan siempre y cuando
sea de tipo imagen.

	La query me quedó muy simple (o no recuerdo bien la proyección a
hacer):

SELECT N.id, N.tit, N.cop, N.des, N.fecha, D.id, D.ruta
FROM (
news AS N
)
LEFT JOIN DATA AS D ON ( N.id = D.id_news
AND D.tipo =  'img' ) 
GROUP BY N.id

	Esto me devuelve todas las News, tengan o no Data de tipo imagen, y si
tienen imagen, me devuelve la primera.

	Una salida de ejemplo con tus datos, y una noticia sin 'data' para
testear que también aparezca me dió:

id	tit							cop							des							fecha		id	ruta
23	Lorem ipsum dolor sit amet, consectetuer adipiscin...	Phasellus viverra nulla ut metus varius laoreet. Q...	 Nam quam nunc, blandit vel, luctus pulvinar, hend...	2010-09-14	14	img1.jpg
24	Lorem ipsum dolor sit amet, consectetuer adipiscin...	Phasellus viverra nulla ut metus varius laoreet. Q...	 Nam quam nunc, blandit vel, luctus pulvinar, hend...	2010-09-10	15	img2.jpg
25	un título						un copete						una descripción...					2010-10-22	NULL	NULL

	Estoy proyectando también el id de data para ver que sea el más chico.

	Era esto???


El vie, 01-10-2010 a las 18:43 -0300, Silverzero escribió:
> Ahi mando!
> 
> Estructura de tabla para la tabla `data`
> --
> 
> CREATE TABLE IF NOT EXISTS `data` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_news` int(11) NOT NULL,
>   `ruta` text collate utf8_unicode_ci NOT NULL,
>   `tipo` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `titulo` varchar(255) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=17 ;
> 
> --
> -- Volcar la base de datos para la tabla `data`
> --
> 
> INSERT INTO `data` (`id`, `id_news`, `ruta`, `tipo`) VALUES
> (13, 23, 'archivo.ppt', 'file),
> (14, 23, 'img1.jpg', 'img'),
> (15, 24, 'img2.jpg', 'img'),
> (16, 24, 'img3.jpg', 'img');
> 
> Estructura de tabla para la tabla `news`
> --
> 
> CREATE TABLE IF NOT EXISTS `news` (
>   `id` int(11) NOT NULL auto_increment,
>   `usr_id` int(11) NOT NULL,
>   `fecha` date NOT NULL,
>   `tit` varchar(255) collate utf8_unicode_ci NOT NULL,
>   `cop` text collate utf8_unicode_ci NOT NULL,
>   `des` text collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=25 ;
> 
> Volcar la base de datos para la tabla `news`
> --
> 
> INSERT INTO `news` (`id`, `usr_id`, `fecha`, `tit`, `cop`, `des`)
> VALUES
> (24, 1, '2010-09-10', 'Lorem ipsum dolor sit amet, consectetuer
> adipiscing elit. ', 'Phasellus viverra nulla ut metus varius laoreet.
> Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
> Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus.
> Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper
> libero, sit amet adipiscing sem neque sed ipsum.', ' Nam quam nunc,
> blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio
> et ante tincidunt tempus. Donec vitae sapien ut libero venenatis
> faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus
> tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales
> sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit
> cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend
> sapien.'), (23, 1, '2010-09-14', 'Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. ', 'Phasellus viverra nulla ut metus
> varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi
> vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam
> rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam
> semper libero, sit amet adipiscing sem neque sed ipsum.', ' Nam quam
> nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec
> odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis
> faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus
> tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales
> sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit
> cursus nunc, quis gravida magna mi a libero. Fusce vulputate eleifend
> sapien.');
> 
> 
> 
> 2010/10/1 Leonardo Tadei - Pegasus Tech Supply
> <leonardot en pegasusnet.com.ar>
>         Carolina,
>         
>         El vie, 01-10-2010 a las 13:06 -0300, Silverzero escribió:
>         
>         > No te dije que "efecto" era: me repite la misma imagen para
>         todas las
>         > publicaciones listadas.
>         
>         
>                Entonces falta algún alias para desambiguar un campo de
>         la query
>         respecto de la subquery...
>                De veras, mandá la estructura de las 2 tablas y un par
>         de datos de
>         pruebas y lo vemos!
>         
>         
>         
>         > 2010/10/1 Silverzero <silverzero.52 en gmail.com>
>         >         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.
>         >
>         >


-- 

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