Foros del Web » Programando para Internet » PHP »

Cambiar posiciones de los post

Estas en el tema de Cambiar posiciones de los post en el foro de PHP en Foros del Web. Tengo una serie de post que en su capo "posición"van adoptando su misma "id", pero algunas veces requiero que un post antiguo sea el primero, ...
  #1 (permalink)  
Antiguo 23/07/2013, 00:34
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 18 años
Puntos: 3
Cambiar posiciones de los post

Tengo una serie de post que en su capo "posición"van adoptando su misma "id", pero algunas veces requiero que un post antiguo sea el primero, segundo, etc.

he probado aumentando el numero de posición pero no me agrada el funcionamiento puesto que si un post tiene posición 10 y otro 9 al subir el 9 quedaría como 10 y el 10 sigue siendo 10 y por consiguiente seria lo mismo.

lo que quisiera es que las posiciones se intercambiaran afectando los dos post y no uno solo, que al subir el 9 a 10 el que era 10 baje a ser 9.

hay que tener en cuenta que hay post con saltos en su numeración es decir 1, 3,4,5,7,10. entonces como seria el manejo de la siguiente o anterior posición ya que al realizar el update no puede ser de tipo where id=$iv++
  #2 (permalink)  
Antiguo 23/07/2013, 02:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Cambiar posiciones de los post

Yo usaría una tabla auxiliar

Destacados
id
id_post FK tablapost.id_post ON DELETE RESTRICT
orden INTEGER

ON DELETE RESTRICT antes de borrar un post de la tabla de post si és un destacado debes eliminarlo de destacados y corregir los ordenes.

Con esta query optienes el orden que deseas
Código MySQL:
Ver original
  1. SELECT tablapost.*,destacdos.orden
  2. FROM tablapost LEFT JOIN destacdos ON tablapost.id_post=destacados.id_post
  3. ORDER BY if(destacdos.orden IS NULL,1,0),destacdos.orden,tablapost.id_post;

Ahora solo tienes que gestionar la lista de la tabla auxiliar....

Si siempre actualizas el primero es relativamente fácil

Código MySQL:
Ver original
  1. UPDATE destacados SET orden=orden+1;
  2. INSERT INTO destacados (id_post,orden) VALUES (XX,1);
Si no

Código MySQL:
Ver original
  1. UPDATE destacados SET orden=orden+1 WHERE orden>Y;
  2. INSERT INTO destacados (id_post,orden) VALUES (XX,Y);

donde Y es la posición donde quieres insertar el destacado....

Para eliminar destacados debes saber el id_post y el orden que ocupa

Código MySQL:
Ver original
  1. SELECT orden FROM destacados WHERE id_post=X -- --> Y
  2. DELETE FROM destacados WHERE id_post=X
  3. UPDATE destacados SET orden=orden-1 WHERE orden>Y;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 23/07/2013 a las 03:03

Etiquetas: posiciones, post
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 18:22.