PHP - ORDEB BY columna1, columna2 DESC LIMIT

 
Vista:

ORDEB BY columna1, columna2 DESC LIMIT

Publicado por Santiago Sisul (6 intervenciones) el 06/11/2021 16:29:52
Buen dia gente! tengo el siguiente problema:
Tengo una base de datos de noticias y necesito hacer una consulta por las cuatro noticias mas leídas pero que sólo sean de las ultimas 20 noticias. Intente con el siguiente código pero no me funciona:

"SELECT * FROM noticia ORDER BY `id_noticia` DESC LIMIT 20, `count` DESC LIMIT 4"

aparentemente el LIMIT no se puede usar dos veces, alguna ayudita o sugerencia? desde ya muchas gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 393
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ORDEB BY columna1, columna2 DESC LIMIT

Publicado por Jefferson (131 intervenciones) el 06/11/2021 22:09:11
Hola

1
SELECT * FROM noticia ORDER BY `id_noticia` DESC LIMIT 20,4

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ORDEB BY columna1, columna2 DESC LIMIT

Publicado por De santiago sisul (6 intervenciones) el 06/11/2021 22:14:06
De esta forma no me acomoda los mayores 4 de las últimas 20
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ORDEB BY columna1, columna2 DESC LIMIT

Publicado por Kathyu (714 intervenciones) el 15/11/2021 15:52:07
He estado analizando esto, aunque no lo crean.

Lo intente en mi ambiente de pruebas pero MariaDB o MySQL no aceptan hacerlo de la manera mas fácil, así que hay que buscarle otras formas.

Dejare unos Seudocódigos para ver si te sirven de algo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Crear una Tabla temporal, la cual no aparecera entre las tablas de tu DB
CREATE TEMPORARY TABLE last20 (id INT NOT NULL, counter INT NOT NULL);
 
// Seleccionar las 20 ultimas noticias, por ID
SELECT id,counter  FROM noticias ORDER BY id DESC LIMIT 20;
 
// Guardar ese resultado en un array, variable o lo que sea
$last20;
 
// Insertarlos en la tabla temporal
INSERT INTO last20 (id,counter) VALUES ($last20);
 
// Ya con esos 20 registros puedes seleccionar los 4 mas leídos
SELECT id FROM last20 ORDER BY counter DESC LIMIT 4;
 
// Guardar esos últimos 4 IDs en un array, variable o lo que sea
$last4;
 
// Consultar y traer de la DB esas 4 noticias, por sus IDs
SELECT * FROM noticias WHERE id IN ($last4);
 
// Podrías eliminar luego la tabla temporal

Básicamente así seria la vuelta, pero si este dato lo necesitas mucho supongo que cargaría el server y podría hacer tardar tu respuesta a las ultimas 4 noticias. Así que en ves de una tabla temporal, yo crearía una tabla donde siempre estén los últimos 20 IDs de mis noticias, bastaría con hacer un script que cada ves que se inserte una noticia coja los últimos 20 IDs y los meta en esa tabla de los últimos 20.

Ya con esa tabla creada y poblada tomaría mis ultimas 4 noticias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ORDEB BY columna1, columna2 DESC LIMIT

Publicado por Santiago (6 intervenciones) el 15/11/2021 15:57:47
genial muy buena lógica. muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar