Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/07/2012, 08:15
Avatar de h2swider
h2swider
 
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 17 años, 3 meses
Puntos: 194
Ordenando una matriz

Tengo una matriz, producto de una consulta. Deseo ordenar sus elementos de acuerdo al campo N_SOLICITUD, pero el orden que requiero no es ascendente ni descendente, si no, la aparición de los registros "Pendiente" primeros.

Tengo la posibilidad de modificar el procedimiento oracle que contiene la consulta, o el php que recibe el arreglo. Lo que no puedo hacer es modificar la tabla agregando un campo orden que seria lo mas natural :/

La matriz tiene una forma similar a esta.
Código PHP:
Ver original
  1.   0 =>
  2.     array
  3.       'NOMBRE' => string 'DARIO HOYOS' (length=11)
  4.       'EMAIL' => string '[email protected]' (length=13)
  5.       'C_LEGAJO' => string '11111' (length=5)
  6.       'OBSERVACIONES' => string 'asdasd' (length=6)
  7.       'C_ESTADOUSUARIO' => string '1' (length=1)
  8.       'FECHA_ALTA' => string '10/07/2012' (length=10)
  9.       'D_ESTADOUSUARIO' => string 'Aprobado' (length=8)
  10.       'N_SOLICITUD' => string '61' (length=2)
  11.   1 =>
  12.     array
  13.       'NOMBRE' => string 'Dario Hoyos' (length=11)
  14.       'EMAIL' => string '[email protected]' (length=18)
  15.       'C_LEGAJO' => string '62631' (length=5)
  16.       'OBSERVACIONES' => string 'probando1234' (length=12)
  17.       'C_ESTADOUSUARIO' => string '1' (length=1)
  18.       'FECHA_ALTA' => string '05/07/2012' (length=10)
  19.       'D_ESTADOUSUARIO' => string 'Pendiente' (length=8)
  20.       'N_SOLICITUD' => string '50' (length=2)
  21.   2 =>
  22.     array
  23.       'NOMBRE' => string 'DARIO HOYOS2' (length=12)
  24.       'EMAIL' => string '[email protected]' (length=18)
  25.       'C_LEGAJO' => string '11112' (length=5)
  26.       'OBSERVACIONES' => string 'asdas' (length=5)
  27.       'C_ESTADOUSUARIO' => string '1' (length=1)
  28.       'FECHA_ALTA' => string '10/07/2012' (length=10)
  29.       'D_ESTADOUSUARIO' => string 'Rechazado' (length=8)
  30.       'N_SOLICITUD' => string '62' (length=2)

Y el procedimiento (algo enredoso) es este

Código SQL:
Ver original
  1. PROCEDURE sp_usuarios_en_sistema (p_fecha_desde IN VARCHAR2, p_fecha_hasta IN VARCHAR2, p_estado_usuario IN INTEGER, p_legajo IN INTEGER, p_nombre IN VARCHAR2,  p_tipo_usuario IN INTEGER,  p_n_solicitud IN INTEGER ,p_recordset OUT CURSOR_TYPE)
  2.   AS
  3.   BEGIN
  4.     OPEN p_recordset FOR
  5.     SELECT
  6.             U.nombre,
  7.             U.email,
  8.             U.c_legajo,
  9.             U.observaciones,
  10.             U.c_estadousuario,
  11.             TO_CHAR(U.fecha_alta, 'dd/mm/yyyy')fecha_alta,
  12.             E.d_estadousuario,
  13.             R.n_solicitud
  14.     FROM   cc_usuario U
  15.     INNER JOIN cc_estadousuario E
  16.     ON U.c_estadousuario = E.c_estadousuario
  17.     INNER JOIN
  18.         (SELECT DISTINCT n_solicitud, c_usuario
  19.         FROM cc_rol_usuario
  20.         WHERE c_usuario NOT IN (SELECT DISTINCT c_usuario FROM cc_rol_usuario WHERE c_tipousuario = 1 AND c_estado = 1)
  21.         ) R
  22.     ON U.c_usuario = R.c_usuario
  23.     WHERE U.c_estadousuario <> 4
  24.     AND (p_fecha_desde IS NULL OR TO_DATE(p_fecha_desde,'dd/mm/yyyy')  <= TRUNC(U.fecha_alta))
  25.     AND (p_fecha_hasta IS NULL OR TO_DATE(p_fecha_hasta,'dd/mm/yyyy') >= TRUNC(U.fecha_alta) )
  26.     AND (p_estado_usuario IS NULL OR p_estado_usuario = U.c_estadousuario OR p_estado_usuario = 0)
  27.     AND (p_legajo IS NULL OR p_legajo = U.c_legajo OR p_legajo = 0)
  28.     AND (p_nombre IS NULL OR UPPER(U.nombre) LIKE '%' || UPPER(p_nombre) || '%')
  29.     AND (p_tipo_usuario IS NULL OR p_tipo_usuario = 0 OR EXISTS (SELECT 1
  30.                                                                 FROM cc_rol_usuario j
  31.                                                                 WHERE j.c_usuario = U.c_usuario
  32.                                                                 AND j.c_tipousuario = p_tipo_usuario
  33.                                                                 ))
  34.     AND (p_n_solicitud IS NULL OR p_n_solicitud = R.n_solicitud OR p_n_solicitud = 0)
  35.     ORDER BY U.nombre;
  36.   END sp_usuarios_en_sistema;
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives