Foros del Web » Programando para Internet » PHP »

Alterar el orden de una lista ¿desde PHP o desde MySQL?

Estas en el tema de Alterar el orden de una lista ¿desde PHP o desde MySQL? en el foro de PHP en Foros del Web. Hola colegas: Saludos. Tengo esta duda. Estoy trabajando con php y mysql, construyendo diversas listas, de registros, tomemos como ejemplo, una tabla con noticias. Para ...
  #1 (permalink)  
Antiguo 07/11/2005, 15:26
 
Fecha de Ingreso: diciembre-2002
Mensajes: 17
Antigüedad: 21 años, 4 meses
Puntos: 0
Alterar el orden de una lista ¿desde PHP o desde MySQL?

Hola colegas:

Saludos.

Tengo esta duda. Estoy trabajando con php y mysql, construyendo diversas listas, de registros, tomemos como ejemplo, una tabla con noticias.
Para hacerlo más simple digamos q la tabla tiene un campo id_noticia autoincrementable, que es el índice, un campo titulo y un campo texto.
Yo A B M estos registros, y los ordenaba con criterios diversos para mostrarlos.
Mi problema es que me solicitaron alguna forma de alterar el orden arbitrariamente, vale decir, arbitrariamente, por un criterio no ímplicito en los registros, decidir que determinada nota va primera, segunda, etc. Además este orden debe ser modificado continuamente.
Por lo pronto agregué un nuevo campo orden, y allí se ponen enteros que indican el orden de los registros, pero esto es muy desprolijo, ya que simplemente dejé un campo de texto donde poner el orden.
Quisera saber si existe una forma más ortodoxa y consistente de hacerlo.
Gracias.
__________________
NO HAY VERDAD, SOLO PERCEPCIÓN.
  #2 (permalink)  
Antiguo 07/11/2005, 15:29
 
Fecha de Ingreso: diciembre-2002
Mensajes: 17
Antigüedad: 21 años, 4 meses
Puntos: 0
disculpen, acá hay una pregunta similar, casi diría ugual:
ver
__________________
NO HAY VERDAD, SOLO PERCEPCIÓN.
  #3 (permalink)  
Antiguo 07/11/2005, 15:36
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Lo que se suele hacer (Suelo hacer) es ponerle un orden a dichos registros en la db. El mismo es un campo llamado orden (valga si) del tipo integer, y en donde lo visualizas (el listado del abm en este caso) una columna con las flechitas de subir y bajar.
Luego en el front, todo lo que resta es ordenar por ese campo (en el listado del abm tambien lo estarias haciendo).
Esa es la idea, si alguna parte del codigo se te complica pidela y te la paso.

Saludos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 07/11/2005, 15:43
 
Fecha de Ingreso: diciembre-2002
Mensajes: 17
Antigüedad: 21 años, 4 meses
Puntos: 0
Gracias colega!

ok, supongamos que tengo 2 registros, uno con orden 1, y otro con orden 2.
Cuando hago click en la flecha subir del registro 2, llamo a una función que hace qué?

Permuta los valores de 1 y 2? Es decir el registro 1 ocupa el lugar del 2 y viceversa?

Gracias de nuevo!!!
__________________
NO HAY VERDAD, SOLO PERCEPCIÓN.
  #5 (permalink)  
Antiguo 07/11/2005, 15:48
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Claro!....En el ordenar (ordenar.php con mysql), deberás:
1-Levantar el id del registro a ordenar
2-Levantar el orden del registro anterior, que puede ser 0 en caso de no tenerlo. (estos dos datos puedes pasarlos por get)
3-Levantar el orden mayor con un query.
4-Hacer ambos update, cambiando su orden.
5-Volver al listado.

Hay varios puntos que tendrás que tener en cuenta, como que el primer registro no se puede subir, ni bajar el ultimo.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 07/11/2005, 15:50
 
Fecha de Ingreso: diciembre-2002
Mensajes: 17
Antigüedad: 21 años, 4 meses
Puntos: 0
Ta más que claro!
Si abré hecho << prev || next >> con loadMovie en flash!!!!
jajajaja
muchas gracias, me aclaraste las dudas.
Por cierto, estudiowas... intersante home... falta mucho para el soon?
__________________
NO HAY VERDAD, SOLO PERCEPCIÓN.
  #7 (permalink)  
Antiguo 07/11/2005, 19:03
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Ahí le pase por msn los files básicos para dicha tarea, y charlamos un rato :D...

Si a alguién le interesan dichos códigos no tiene mas que pedirlos.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 07/11/2005, 21:45
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Cita:
Iniciado por nicolaspar
Ahí le pase por msn los files básicos para dicha tarea, y charlamos un rato :D...

Si a alguién le interesan dichos códigos no tiene mas que pedirlos.
Podrias postearlos y comentarlos, asi el dia de mañana cuando alguna otra persona tenga esta misma consulta y usa el buscador del foro no se encuentra con un thread a medias terminar.

Saludos y gracias.
  #9 (permalink)  
Antiguo 08/11/2005, 07:39
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
A ver...lo tengo todo adaptado en cosas que no se sacan en un paso, pero tratare de explicarlo...
Tenemos dos partes, una es el listado, el cual se ordena siempre por el campo orden y el cuál tendrá en html esta columna para ordenar los registros.
Entonces, en el listado tendríamos algo como:

Código PHP:
<?php
#El query que levantara todo de la tabla, supongamos, noticias
$sql "Select * from noticias order by orden";
$PAGINADO 10;
$pagina $_GET["pagina"];
$offset = ( $pagina $PAGINADO ) - $PAGINADO;
$total =  mysql_num_rowsmysql_query$sql ) ) ;
#Levantar paginado
$sql .= ' LIMIT '.$offset.','.$PAGINADO ;
$r mysql_query$sql );
?>
<table width="500">
    <tr>
        <td>Título</td>
        <td>Orden</td>
    </tr>
<?php
    $codigo_ant 
;
    
$orden_ant ;
    
$cont ;    
    while( 
$rs mysql_fetch_array$rMYSQL_ASSOC ) ){
                   
$cont+=1;
?>
<tr>
  <td><?php echo $rs["titulo"];?></td>
  <td><?php if ($cont || $pagina >){?><a href="ordenar.php?orden=<?php echo $orden_ant ?>&codigo=<?php echo $codigo_ant ?>"><img src="images/flechaup_azul.gif"></a>&nbsp;<?php }  if ($PAGINADO*($pagina-1)+$cont $total ){?>&nbsp;<a href="ordenar.php?codigo=<?php echo $rs["codigo"?>&orden=<?php echo $rs["orden"?>"><img src="images/flechadwn_azul.gif"></a><?php ?></td>
</tr>

<?php
    $codigo_ant
=$rs["codigo"];
    
$orden_ant=$rs["orden"];
    }
    
mysql_free_result$r );

#Acá pondrían el paginado.
?>
Bien, acá tendríamos un listado con dos columnas, titulo o orden.
Nos restaría únicamente el file ordenar.php que ordenaría estos registros:

Código PHP:
<?php
$codigo 
$_GET['codigo'];
$orden $_GET['orden'];
define"TABLA""noticias"1);
    
$rs mysql_query"select codigo, orden from "TABLA ." where  orden > "$orden ." order by orden LIMIT 1" );
    if ( 
$r mysql_fetch_array$rsMYSQL_ASSOC ) ){
        
$codigoArriba $r["codigo"];
        
$ordenArriba $r["orden"];
        
mysql_query"update ".TABLA." set orden="$ordenArriba ." where codigo="$codigo );
        
mysql_query"update ".TABLA." set orden="$orden ." where codigo="$codigoArriba );
    }
    
mysql_free_result$rs );
header("Location: listado.php");
?>
Eso sería todo, si hay algo que no les funcione diganlo.

PD: Esto no tiene ninguna validacion siquiera de los tipos de datos, pueden agregarlo a gusto y necesidad. Espero que sea de utilidad.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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.
Tema Cerrado




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