entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Buenos Días, estoy construyendo una Query para que me devuelva los artículos más vistos en los últimos 7 Días, y mi situación es la siguiente:
tengo tres tablas con noticias y todas tienen las mismas columnas. Nombre de las tablas news1, news2, news3 con los campos titulo, fecha, visitas, id,... entonces quiero que me muestre todos los títulos, visitas, fecha de las tablas de en los últimos 7 Días ordenados por la cantidad de visitas DESC limite 7 para así tener las 7 más visitadas de la última semana.
Para una tabla si me funciona:

SELECT * FROM
(SELECT titulo,visitas FROM news10 WHERE DATEDIFF(CURDATE(), STR_TO_DATE(Fecha, '%Y/%m/%d')) <= 6 ORDER BY visitas DESC LIMIT 2) tabla1  

Pero para dos Tablas no me funciona:

SELECT * FROM
(SELECT titulo,visitas FROM news10 WHERE DATEDIFF(CURDATE(), STR_TO_DATE(Fecha, '%Y/%m/%d')) <= 6 ORDER BY visitas DESC LIMIT 2) t1,
(SELECT titulo,visitas FROM news11 WHERE DATEDIFF(CURDATE(), STR_TO_DATE(Fecha, '%Y/%m/%d')) <= 6 ORDER BY visitas DESC LIMIT 2) t2

0voto

carlossevi comentado

Veo que ya te lo han resuelto, pero me surge la siguiente duda: ¿registras en la base de datos cada visita que tiene una noticia?

0voto

dairon comentado

si mano lo hago con un update visitas+1

1 Respuesta

3votos

wroque Puntos4630

Si necesitas que todos los datos sean devueltos en una consulta, debes agregar la palabra UNION al final de cada query y verificar que los nombres de columnas coincidan.

ejemplo:

SELECT column1, column2 From tableName1 WHERE ...
UNION
SELECT column1, column2 From tableName2 WHERE ...
UNION 
SELECT column1, column3 as column2 From tableName3 WHERE ... ORDER BY ... LIMIT .. 

lo que hace finalmente es unir las consultas en una sola.

Saludos.

0voto

dairon comentado

Me quedó bien de esta manera:

 SELECT titulo,visitas From news1 WHERE DATEDIFF(CURDATE(), STR_TO_DATE(Fecha, '%Y/%m/%d')) <= 6 
    UNION
    SELECT titulo,visitas From news2 WHERE DATEDIFF(CURDATE(), STR_TO_DATE(Fecha, '%Y/%m/%d')) <= 6 
    UNION 
    SELECT titulo,visitas From news3 WHERE DATEDIFF(CURDATE(), STR_TO_DATE(Fecha, '%Y/%m/%d')) <= 6 ORDER BY visitas DESC LIMIT 7

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta