Un Select "complicado"

VoKyE
24 de Septiembre del 2003
He intentado de varias formas realizar una consulta y aun no logro realizarla satisfactoriamente.

Tengo una tabla de noticias que entre otras cosas tiene un:
id,titulo,categoria,fecha_registro

Otro tabla de categorias que tiene:
id_cat,nombre_categoria


Planteamiento del problema:
- No se cuantas categorias tengo (pueden ser 3,4,8...n)
- Quiero obtener de la tabla noticias, UNICAMENTE las tres ultimas noticias registradas de cada categoria.

TIPS:
Es algo asi como generar primero una consulta de la categoria 1 ordenada por fecha descendiente y pidiendo el limite 3.

SELECT * FROM noticias WHERE categoria = '1' ORDER BY fecha DESC LIMIT 3;

Luego con la siguiente categoria 2 ordenada por fecha y pidiendo el limite 3.

SELECT * FROM noticias WHERE categoria = '2' ORDER BY fecha DESC LIMIT 3;

Y asi sucesivamente.....

¿Eso como se hace en una sola consulta?

Gracias

jakman
24 de Septiembre del 2003
hola

es facil, primero, si en tu tabla de noticias el kampo categoria es el id de la categoria en tu tabla categorias, entonces tienes ke hacer lo siguiente

un select id_cat from categorias

y el resultado meterlo en un arreglo

kon el while (($fila=mysql_fetch_array($Resultado)))

ahora tienes en tu arreglo $fila el id de kada categoria

entonces realizas tu konsulta para obtener las noticia

pasandole komo parametro el id y listo

todo esto dentro del while

bueno es lo ke yo entiendo ke kieres hacer

si tienes alguna duda mandame un mail a [email protected]

suerte

ciao

VoKyE
24 de Septiembre del 2003
No no no no... quiero la consulta directa en mysql un
SELECT * bla bla bla
Que solo me presente esos resultados..

En php se como hacer eso, con un "for" es mas sencillo que con un while...

Pero quiero la consulta MySQL que me presente nada mas esos resultados sin usar PHP.

No es capricho, solo que lo que tu indicas requiere generar 1 consulta para obtener los id de las categorias luego una consulta por cada categoria en la tabla noticias.. y pues imaginate que tengas 100 categorias tendrias que ejecutar 100 consultas en la tabla noticias.., y si tienes 300 visitas a la pagina??? 100 x 300 = 30,000 consultas wow es mucho... en cambio si lo haces en una sola consulta en lugar de 30 mil nada mas tendrias que hacer 300 consultas...

Anoche probando logre con Max() obtener la ultima noticia de cada categoria

select id,categoria,max(fecha) from noticias group by categoria;

Pero requiero las tres ultimas noticias de cada categoria.



Agradezco tu apoyo espero dar con el resultado.

VoKyE