[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