Ver Mensaje Individual
  #10 (permalink)  
Antiguo 14/02/2006, 14:10
dreglad
Invitado
 
Mensajes: n/a
Puntos:
Posible solución

Efectivamente, con DHTML o algunos recursos de "Web 2.0" podemos ordenar facilmente los registros del lado del cliente, el reto es cómo almacenar y respetar este orden en consultas sucesivas..

Se me ocurrió una solución, teniendo la información de orden separado de la base de datos, con un arreglo de números enteros

Así lo planteo:


Tenemos almacenado (a lo mejor serializado en un archivo, o en otra tabla de la base de datos, etc..) este arreglo que contiene la información de orden:



Código PHP:
//
// "lugar" => "id en la tabla"
$orden = array (
   
1  => 3
   2  
=> 1
   3  
=> 4
   4  
=> 2


Ahor, hacemos UNA SOLA consulta a la base de datos...
Código PHP:
$arrayRegistros consultar("SELECT * FORM Tabla ORDER BY id");
// Realmente el ORDER BY puede ser cualquiera, ya que la vamos
// a ordenar después 
Suponemos que la función consultar() nos devuelve un arreglo parecido a éste (modelo relacional, como MySQL):

Código PHP:
//
array (
   [
0] =>
         [
'id'] => 1
         
['nombre'] => ....
         ........   => ....
   [
1] =>
        [
'id']  => 2
        
['nombre'] => ....
         ........  => ....
   [
2]  .....
   ..........


Ahora, para ordenar este arreglo con nuestro propio criterio ($orden)...


Código PHP:
//
arrayOrdenado($arrayRegistros$arrayOrden)
{
  
$arrayOrdenado = array();

  foreach (
$arrayOrden as $orden => $id)
  {
    foreach (
$arrayRegistros as $registro)
    {
      if (
$registro['id'] == $id)
       {
         
$arrayOrdenado[$orden] = $registro['id'];
         break;
       }
    }
  }
  return 
$arrayOrdenado;


Entonces, los pasos generales para hacer la consulta serían:

Código PHP:
//
$orden    obtener_array_orden();
$consulta obtener_datos_de_bd();
$resiltado arrayOrdenado($resultado$orden);

//Y listo, el arreglo $resultado tiene los datos ya ordenados 
Efectivamente Cluster, esta es una función bastante recursiva (doble ciclo anidado), sin embargo sólo se manipulan un par de "arrays" en la memoria, y no decenas o cientos de consultas a la base de datos.

El mayor inconveniente de este "método", es que dicho arreglo de $orden, tiene que ser actualizado cada vez que hacemos un INSERT o un DELETE, para mantenerlos "sincronizados"...

No sé, qué opinan? No será demasiado desmadre y haya una solución más simple?