[Madrid-pm] Crear listados desde una BD
Joaquin Ferrero
explorer en joaquinferrero.com
Mie Jul 9 04:49:32 PDT 2008
El mié, 09-07-2008 a las 12:36 +0200, PEGG escribió:
> Hola, tengo una tabla en una BD de mysql que almacena el nombre de un
> país y su correspondiente id.
> Por ejemplo:
> ID - País
> 1 - ESP
> 1 - USA
> 1 - ITA
> 2 - JPN
> 2 - RUS
> 3 - VEN
>
> Mi problema es que tengo que consultar la tabla y juntar las
> direcciones, quedando así:
> ESP - USA
> ESP - ITA
> USA - ITA
> JPN - RUS
>
> VEN no aparecería porque está sola.
>
> La consulta sql: "SELECT id, pais from direcciones".
> He probado así:
> while ( @direcciones = $sth->fetchrow_array() ) {
> foreach $direccion (@direcciones) {
>
> foreach $agrupa (@direcciones) {
> if ( $direccion eq $agrupa ) { }
> else {
> print "\U$direccion;$agrupa\n";
> }
> }
> }
> Pero no lo muestra como quiero, ya no se que hacer.
> Agradezco vuestros comentarios.
Hay que aplicar algo de combinatoria...
#!/usr/bin/perl
my @resultados = (
[ 1 => ESP ],
[ 1 => USA ],
[ 1 => ITA ],
[ 2 => JPN ],
[ 2 => RUS ],
[ 3 => VEN ],
);
# Leemos y hacemos la estadística
my %resultados;
foreach my $resultado ( @resultados ) {
my ($ID, $pais) = @{$resultado}[0,1];
push @{$resultados{ $ID }}, $pais;
}
# Sacamos las combinaciones
foreach my $clave ( keys %resultados ) {
my $numero_elementos = @{$resultados{$clave}};
my $ultimo = $numero_elementos-1;
if ( $numero_elementos > 1 ) {
for my $x ( 0 .. $ultimo-1 ) {
for my $y ( $x+1 .. $ultimo ) {
print "$resultados{$clave}->[$x] - $resultados{$clave}->[$y]\n";
}
}
}
}
__END__
--
JF^D
Más información sobre la lista de distribución Madrid-pm