Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Ordenar por importancia las 10 ultimas noticias...

Estas en el tema de Ordenar por importancia las 10 ultimas noticias... en el foro de Mysql en Foros del Web. Saludos, Tengo una duda y es que necesito hacer algo en MySql y no se si se puede hacer o no... Resumiendo, una tabla de ...
  #1 (permalink)  
Antiguo 25/03/2007, 19:39
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Ordenar por importancia las 10 ultimas noticias...

Saludos,
Tengo una duda y es que necesito hacer algo en MySql y no se si se puede hacer o no... Resumiendo, una tabla de noticias con un campo "id_noticia" autoincremental, y un campo "importancia" en la que se valora las noticias del 1 al 10.
Yo mostraba las 10 ultimas noticias en el index con la siguiente consulta:
Código:
"SELECT * FROM noticias ORDER BY id_noticia DESC LIMIT 10"
de esta forma la ultima noticia metida se mostraba la primera... pues bien ahora necesito que esas 10 ultimas noticias introducidas se ordenen por importancia y no se si puede hacerse... porque, que yo sepa no se puede hacer una consulta que saque las 10 noticias cuyo campo "id_noticia" sean los mayores y esas 10 noticias ordenarlas por "importancia"...
He probado algo así pero da error...
Código:
"SELECT * FROM noticias WHERE id_noticia IN (SELECT id_noticia 
FROM noticias ORDER BY id_noticia DESC LIMIT 10) ORDER BY importancia desc"
Gracias de antemano.
Saludos

Última edición por Pakelo; 03/04/2007 a las 09:48
  #2 (permalink)  
Antiguo 25/03/2007, 20:52
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 13 años, 8 meses
Puntos: 3
Re: Ordenar por importancia las 10 ultimas noticias...

Hola

Intenta con alguna de estas

"SELECT * FROM noticias ORDER BY id_noticia,importancia DESC LIMIT 10"

o

"SELECT * FROM noticias ORDER BY importancia,id_noticia DESC LIMIT 10"

Espero os sirva, suerte
  #3 (permalink)  
Antiguo 26/03/2007, 10:10
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Gracias Patrón, pero eso no me sirve, porque el campo "id_noticia" es el campo clave y por tanto único y por tanto los criterios que pongas despues no sirven de nada.
Y la consulta que pones debajo con el campo "importancia" como primer criterio no me sacaría las ultimas 10 noticias... por tanto tampoco sirve...
Pero gracias de todos modos.
A alguien mas se le ocurre algo?
  #4 (permalink)  
Antiguo 26/03/2007, 11:32
Avatar de noid  
Fecha de Ingreso: marzo-2007
Mensajes: 2
Antigüedad: 12 años, 8 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Si tienes un campo fecha podrías probar con él.
  #5 (permalink)  
Antiguo 26/03/2007, 12:27
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Noid gracias, pero lo que dices no tiene nada que ver con lo que yo pregunto...
  #6 (permalink)  
Antiguo 26/03/2007, 12:50
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 13 años, 8 meses
Puntos: 3
Re: Ordenar por importancia las 10 ultimas noticias...

Haz probado asi?
Código:
"SELECT * 
FROM noticias 
ORDER BY id_noticia DESC,importancia DESC 
LIMIT 10"
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."

Última edición por PequeñoMauro; 26/03/2007 a las 12:52 Razón: error
  #7 (permalink)  
Antiguo 26/03/2007, 13:08
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Gracias Pequeño Mauro pero te digo lo mismo que a El Patrón, el campo "id_noticia" es el campo clave y por tanto único y por tanto los criterios que pongas despues no sirven de nada.
  #8 (permalink)  
Antiguo 26/03/2007, 13:20
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 13 años, 8 meses
Puntos: 3
Re: Ordenar por importancia las 10 ultimas noticias...

Cita:
Iniciado por Pakelo Ver Mensaje
Gracias Pequeño Mauro pero te digo lo mismo que a El Patrón, el campo "id_noticia" es el campo clave y por tanto único y por tanto los criterios que pongas despues no sirven de nada.
Disculpa mi ignorancia pero no entiendo el comentario a que el id_noticia es "el campo clave(eso si entiendo) y por tanto único(eso no entiendo)"

El error te sale en el IN, por que sino me equivoco las sub-consultas no admiten ORDER BY.
El ORDER BY que puse es diferente al de El Patron
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #9 (permalink)  
Antiguo 26/03/2007, 13:27
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

pues con lo de "único" quería decir que si haces una consulta y ordenas por un campo clave o por un campo con valores que no se repiten el orden de las noticias va a ser el que marca dicho campo y todos los demas criterios que pongas despues de ese no serviran... servirían si el primer campo tuviera valores repetidos... en ese caso si que entraria a jugar el segundo criterio...
a eso me refería...
  #10 (permalink)  
Antiguo 26/03/2007, 14:47
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 13 años, 8 meses
Puntos: 3
Re: Ordenar por importancia las 10 ultimas noticias...

HOla

bueno, pues entonces quitale el idnoticia de la consulta, que se ordene solo por importancia, y en vez del idnoticia le pones que esten entre tal fecha y tal otra suponiendo que tengas campos como fecha inicio y fecha fin dentro de las noticias, entonces si tendrian que ordenar por importancia, o podrias agregar un campo orden y los ordenas por ese campo, bueno, espero te sirva, suerte.
  #11 (permalink)  
Antiguo 26/03/2007, 15:09
Avatar de FabianSN  
Fecha de Ingreso: enero-2007
Ubicación: SNicolas, BsAs, Argentina
Mensajes: 96
Antigüedad: 12 años, 10 meses
Puntos: 2
Re: Ordenar por importancia las 10 ultimas noticias...

Cita:
Iniciado por Pakelo Ver Mensaje
pues con lo de "único" quería decir que si haces una consulta y ordenas por un campo clave o por un campo con valores que no se repiten el orden de las noticias va a ser el que marca dicho campo y todos los demas criterios que pongas despues de ese no serviran... servirían si el primer campo tuviera valores repetidos... en ese caso si que entraria a jugar el segundo criterio...
a eso me refería...
Soy nuevo en PHP y en esta PC no puedo probar código, no sé si se puede hacer esto o no, fijate:

1° Extraes en una vaiable por ejemplo $offs el valor del último id_noticia (SELECT max(Id_noticia) as max_id from noticias, creo que el SQL es así)

2° Haces un select como este SELECT * FROM noticias ORDER BY importancia DESC WHERE (id_noticia<=$offs && id_noticia>=&offs-10)

Si le erré a algo lo siento, pero está hecho en el aire y sin probarlo.
Saludos.
  #12 (permalink)  
Antiguo 27/03/2007, 06:59
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Si he entendido bien lo que quieres es obtener los 10 últimos registros y ordenarlos por importancia. Yo no me complicaría haciendo consultas complicadas. Creo que es más eficiente en este caso simplemente obtener los últimos 10 registros y después ordenarlos en tu script php/asp/jsp o aquello que uses.

Por ejemplo en php hay funciones de ordenación de arrays como asort y arsort.

Un saludo
  #13 (permalink)  
Antiguo 27/03/2007, 10:30
Avatar de FabianSN  
Fecha de Ingreso: enero-2007
Ubicación: SNicolas, BsAs, Argentina
Mensajes: 96
Antigüedad: 12 años, 10 meses
Puntos: 2
Re: Ordenar por importancia las 10 ultimas noticias...

Cita:
Iniciado por javi_bus Ver Mensaje
Si he entendido bien lo que quieres es obtener los 10 últimos registros y ordenarlos por importancia. Yo no me complicaría haciendo consultas complicadas. Creo que es más eficiente en este caso simplemente obtener los últimos 10 registros y después ordenarlos en tu script php/asp/jsp o aquello que uses.

Por ejemplo en php hay funciones de ordenación de arrays como asort y arsort.

Un saludo
Es tambien válida esa forma de hacerlo, es más, es la forma en que yo lo hacía hasta hace poco más de 1 año en aplicaciones Visual Basic, hasta que un gurú de mi laburo me demostró el aumento de performance de una aplicación utilizando SQL's en lugar de procedimientos en un lenguaje cualquiera.

No sé como será esto en PHP pero esos procedimiento que mencionas pierden mucho más tiempo que un SQL bien hecho, si tenés muchos usuarios eso termina siendo caro.

De todas formas lo que mencionas es lo más sencillo de hacer y sirve para entender bien lo que se debe hacer.

Saludos.
__________________
Letra de Canciones
  #14 (permalink)  
Antiguo 27/03/2007, 14:52
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

mysql por ejemplo, está enfocado a la consulta por lo que seguro que resultaría bastante más rápido. Pero también piensa que es peor "perder tiempo" en una consulta a la BD que en un proceso php. Con una sola consulta SQL no se me ocurre como hacer lo que dices. La putada es que no funcione el order by en subconsultas por lo que tendrías que separarlo en dos consultas: una en la que obtengas los 10 ids que quieres y otra en la que ordenes por importancia y especifiques que el id sea uno de los obtenidos (con un IN por ejemplo).

Un saludo
  #15 (permalink)  
Antiguo 28/03/2007, 04:37
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

En primer lugar muchisimas gracias a todos por vuestra ayuda, no esperaba tantas respuestas.
Respecto a los ultimos mensajes publicados, creo que Javi_bus tiene razón respecto a que habría que hacer dos consultas, porque, en el caso de que hubiesen borrado alguna noticia de las 10 ultimas, habrían saltos en el id_noticia y ya no se podría hacer esto... (id_noticia<=$offs && id_noticia>=&offs-10)
Lo que no se si es mejor hacer 2 consultas a la BD u ordenar una sola consulta con php... pero probaré con alguna de estas dos opciones, muchas gracias de nuevo.
  #16 (permalink)  
Antiguo 28/03/2007, 13:21
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Me alegro de que entre todos te hayamos ayudado.

Un saludo
  #17 (permalink)  
Antiguo 02/04/2007, 11:29
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Javi_Bus, he estado mirando el manual de php y buscando por ahi como poder ordenar como decias un array con asort o arsort pero no se como hacer para poder ordenar el array por uno de los campos en este caso "importancia"...
Mi código es algo así:

Código:
$consulta="select id_noticia, titular, importancia, fecha, hora, foto1 
               from noticias order by id_noticia desc limit 10";
$resul= @mysql_query($consulta, $id_conexion)
           or die("No se ha podido realizar la consulta");
	
while($fila = mysql_fetch_array($resul))
{
    $id_noticia= $fila["id_noticia"];
    $importancia= $fila["importancia"];
......
podeis ayudarme?

Última edición por Pakelo; 03/04/2007 a las 07:10
  #18 (permalink)  
Antiguo 03/04/2007, 06:52
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Todo depende de cómo organices la información. Por ejemplo puedes volcar la información en de este modo:

Código:
while($fila = mysql_fetch_array($resul)) {
$importancia[($fila["id_noticia"])] = $fila["importancia"];
...
}
Luego ordenar usando la función arsort sobre el array importancia. Eso te dejará el array reordenado de más a menos según su valor pero conservando las claves que son los IDs de las noticias.

Para obtener la información en el orden deseado solo hay que hacer un foreach:

Código:
foreach($importancia as $id_noticia => $importancia_noticia) {
  echo $importancia_noticia;
  echo $id_noticia;
  echo $array_loquesea[($id_noticia)];
...
}
Un saludo
  #19 (permalink)  
Antiguo 04/04/2007, 02:30
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Muchas gracias Javi_Bus, pero tengo una duda, el resto de campos que quieres mostrar de la noticia como se añadirian en tu primer bloque de código??? No necesitare para poder poner mas campos, la fucion "array_multisort" que sirve para ordenar multiples matrices o matrices multi direccionales???

Última edición por Pakelo; 04/04/2007 a las 05:59
  #20 (permalink)  
Antiguo 05/04/2007, 18:57
 
Fecha de Ingreso: abril-2007
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

SELECT
*
FROM
(
SELECT
*
FROM noticias
ORDER BY id_noticia DESC
LIMIT 0 , 10
)
AS noti
ORDER BY noti.importancia DESC

Usando la tabla de ejemplo:

CREATE TABLE `noticias` (
`id_noticia` int(11) NOT NULL auto_increment,
`importancia` int(11) NOT NULL,
`titulo` varchar(255) NOT NULL,
`texto` varchar(255) NOT NULL,
PRIMARY KEY (`id_noticia`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

INSERT INTO `noticias` VALUES (1, 5, 'noticia importancia 5', 'test');
INSERT INTO `noticias` VALUES (2, 10, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (3, 8, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (4, 9, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (5, 1, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (6, 2, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (7, 5, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (8, 8, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (9, 2, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (10, 3, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (11, 7, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (12, 6, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (13, 6, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (14, 10, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (15, 9, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (16, 2, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (17, 4, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (18, 4, 'noticia importancia 10', 'test');
INSERT INTO `noticias` VALUES (19, 5, 'noticia importancia 10', 'test');


Los datos son cualquier cosa, porque me daba fiaca cambiar los textos, pero funciona. Version de mysql 5.0.19
  #21 (permalink)  
Antiguo 06/04/2007, 15:07
 
Fecha de Ingreso: enero-2004
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

Cita:
Iniciado por Pakelo Ver Mensaje
Muchas gracias Javi_Bus, pero tengo una duda, el resto de campos que quieres mostrar de la noticia como se añadirian en tu primer bloque de código??? No necesitare para poder poner mas campos, la fucion "array_multisort" que sirve para ordenar multiples matrices o matrices multi direccionales???
Hola Pakelo,

Es sencillo:

Código:
$elcampoquesea[($fila["id_noticia"])] = $fila["elcampoquesea"];
Así en el segundo bloque de código al recorrer el array importancia, que ya está ordenado, te irá dando en cada iteración del bucle un ID de noticia (siempre guardando el orden que le has dado antes) la cual puedes usar para obtener cada dato ya que con cada campo haces un array de diez datos cuyos índices son los IDs de noticia. Es decir, con que ordenes el array cuyos valores son la importancia, ya obtienes el orden de las noticias. Luego recorres ese array con un foreach y te irán saliendo los IDs en orden los cuales puedes utilizar para ir obteniendo el dato que quieras de esa noticia.

Por ejemplo:

Si en el bucle foreach en ese momento toca la noticia cuyo ID es 11, para obtener el título de la noticia sería algo así: $titulo[($id_noticia)].

Un saludo

Última edición por javi_bus; 06/04/2007 a las 15:12
  #22 (permalink)  
Antiguo 10/04/2007, 03:00
 
Fecha de Ingreso: noviembre-2003
Mensajes: 76
Antigüedad: 16 años
Puntos: 0
Re: Ordenar por importancia las 10 ultimas noticias...

¡Que GRANDES sois...!
Ya lo he terminado, muchisimas gracias a todos de nuevo. Sois unos fieras...
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:30.