Foros del Web » Programando para Internet » PHP »

Ordenar array según dos datos

Estas en el tema de Ordenar array según dos datos en el foro de PHP en Foros del Web. Muy buenas. Estoy intentando hacer una cronología, partiendo de que tengo en la base de datos registros con dos tipos de campo que guardan el ...
  #1 (permalink)  
Antiguo 25/08/2007, 08:32
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Ordenar array según dos datos

Muy buenas.

Estoy intentando hacer una cronología, partiendo de que tengo en la base de datos registros con dos tipos de campo que guardan el año, uno es la creacion (pongamos A) y el otro la desaparicion (pongamos B). Algunos registros en el campo B tienen 0, ya que puede ser que no exista el dato desaparicion.

Entonces, quisiera ordenar los resultados de manera que pueda poner la fecha de creacion y desaparicion de cada registro. Obviamente, algunos, al no tener desaparicion no se repiten, si no que solo se mostraría la creación.

Supongo que lo mas acertado es hacerlo guardando los datos en un array y luego usar sort() y luego en un bucle imprimir los resultados. El problema es el de tener que ordenador estos arrays por dos tipos de campo y repitiendo alguno resultados (campo B!=0).

¿Alguien sabe si se puede? O, ¿alguna idea mejor para hacer esto?

Gracias y un saludo.
  #2 (permalink)  
Antiguo 25/08/2007, 09:35
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Ordenar array según dos datos

Por qué no lo ordenas directamente desde el query en el que traes los datos? sino podrías usar array_multisort
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 25/08/2007, 10:42
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Re: Ordenar array según dos datos

¿Se puede ordenar desde SQL para ordenar por dos campos (hasta aquí si) y que los resultados se repitan en caso de que un campo (no) cumpla cierta condición?
  #4 (permalink)  
Antiguo 25/08/2007, 10:55
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Ordenar array según dos datos

Me mareaste :P
No llego a comprender, pero si lo que necesitas es replicar los datos podes joinear sobre la misma tabla, hacer los order by con condiciones (lo usaba mucho en sql server, supongo que mysql debería soportar order by dinámicos).

Contame con un ejemplo de datos que tenes y que necesitas obtener ;) y vemos si mi capocha te puede dar una ayuda, pero en sql se puede hacer caaaasi todo.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 25/08/2007, 11:29
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Re: Ordenar array según dos datos

Yo leyéndome ahora también casi me da un yuyu. :

Vamos, a ver, tengo una tabla mas o menos así:
Código:
+--------+----------+--------------+
| nombre | creacion | desaparicion |
+--------+----------+--------------+
| aaaaaa |   1990   |     0        |
| bbbbbb |   1988   |     1995     |
| cccccc |   2001   |     0        |
| dddddd |   1998   |     2003     |
| eeeeee |   2002   |     2005     |
+--------+----------+--------------+
Bien. Ahora quería hacer una respresentación cronológica con estos datos, tomando en cuenta la creación y desaparición de cada registro.

En decir, el resultado sería algo así:
Código:
+--------+----------+--------------+
| nombre | creacion | desaparicion |
+--------+----------+--------------+
| bbbbbb |   1988   |     1995     |
| aaaaaa |   1990   |     0        |
| bbbbbb |   1988   |     1995     |
| dddddd |   1998   |     2003     |
| cccccc |   2001   |     0        |
| eeeeee |   2002   |     2005     |
| dddddd |   1998   |     2003     |
| eeeeee |   2002   |     2005     |
+--------+----------+--------------+
Hay registros repetidos, pero están ordenados por creación y por desaparición.

Igual queda un poco confuso así. Así quedaría en forma de lista:
1988 creación de bbbbbb
1990 creación de aaaaaa
1995 desaparición de bbbbbb
1998 creación de dddddd
2001 creación de cccccc
2002 creación de eeeeee
2003 desaparición de dddddd
2005 desaparición de eeeeee

Ahora si que estoy mareado.

Creo que ahora igual se entiende mejor. Yo pensé que por sql no podría hacerse, por eso pensé que ordenarlo con arrays, pero si se puede en sql mejor.

Gracias.
  #6 (permalink)  
Antiguo 25/08/2007, 11:33
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Re: Ordenar array según dos datos

Para remueve valores duplicados de una matriz tienes a array_unique
  #7 (permalink)  
Antiguo 25/08/2007, 11:59
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Ordenar array según dos datos

Claro, intenta hacer un union con la misma tabla, te dejo un ejemplo a ver si haciendo unas pruebas podes lograrlo:

Código PHP:
$sql "
select 
    nombre,
    creacion fecha, 
    0 tipo
from prueba
where creacion > 0

union

select 
    nombre,
    desaparicion fecha, 
    1 tipo
from prueba
where desaparicion > 0

order by fecha 
"

Le puse tipo para que sepas luego en la iteración del recordset cual es creación y cual desaparición

La tabla que use es tal cual me comentaste:

Código:
CREATE TABLE `prueba` (
  `codigo` int(11) unsigned NOT NULL auto_increment,
  `nombre` varchar(255) default NULL,
  `creacion` int(11) unsigned NOT NULL default '0',
  `desaparicion` int(11) unsigned NOT NULL default '0',
  PRIMARY KEY  (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `prueba` */

insert into `prueba` (`codigo`,`nombre`,`creacion`,`desaparicion`) values (1,'aaaa',1990,0),(2,'bbbb',1988,1995),(3,'cccc',2001,0),(4,'dddd',1998,2003),(5,'eeee',2002,2005);
Contame como va con esto.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 25/08/2007, 14:05
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Re: Ordenar array según dos datos


¡Gracias nicolaspar! Ahora en un ratito pruebo a ver como va.

  #9 (permalink)  
Antiguo 25/08/2007, 14:20
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Ordenar array según dos datos

Dale, contá como fue :)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 25/08/2007, 14:25
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Re: Ordenar array según dos datos

Bufff.. Que bueno.
Funciona perfectamente.

Muchísimas gracias nicolaspar.
Me da que hay que empollar algo mas de SQL.
  #11 (permalink)  
Antiguo 25/08/2007, 14:38
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 20 años
Puntos: 34
Re: Ordenar array según dos datos

No hay porque ;)

Y en cuanto a sql, hay que saber hasta donde da y saber evaluar cuando es correcto usarlo, muchas veces se abusa de él también.

Por ahí, llevar esto a un array es más efectivo, pero no se si vale la pena.
__________________
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:43.