Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

eunito

Foreach num campo para obter pares de combinações desse mesmo campo!

Mensagens Recomendadas

eunito    0
eunito

Olá a todos!

Podem-me ajudar na seguinte situação?

Tenho uma tabela que guarda um conjunto de pontos no país e um procedimento que devolve distancias entre dois pontos - dist(latA,lngA,latB,lngB)

Campos da tabela A: IDponto INT, latitudeP float, longitudeP float, visitado bit;

IDPonto # latP # lngP # visitado

1 # 1,123 # 1.456 # 1

2 # 2,123 # 3.456 # 0

3 # 4,123 # 1.456 # 1

4 # 7,123 # 1.456 # 1

se fizer um select para obter apenas os IDPonto obtenho o 1,2,3 e 4 e neste exemplo as ligações possíveis são 1-2, 1-3, 1-4, 2-3, 2-4 e 3-4.

Como é que consigo obter uma tabela com seguintes colunas:

Origem # Destino # distancia (km)

1 # 2 # 5

1 # 3 # 50

1 # 4 # 15

2 # 3 # 3

2 # 4 # 6

3 # 4 # 1

?

Obrigado!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PaisNeto    2
PaisNeto

Boa tarde,

eu vou te apresentar uma solução, mas não foi feita no mysql, tenta adaptar para o mysql.

Criei uma tabela e passei os dados que apresentas em cima.

DECLARE
 CURSOR ROTAS IS
 SELECT IDPONTO,LATITUDE,LONGITUDE
 FROM PONTO
 ORDER BY IDPONTO ASC;
 --
 CURSOR ROTAS1 IS
 SELECT IDPONTO,LATITUDE,LONGITUDE
 FROM PONTO
 ORDER BY IDPONTO ASC;
BEGIN
 --
 FOR P IN ROTAS LOOP
   FOR R IN ROTAS1 LOOP
  IF P.IDPONTO < R.IDPONTO THEN
    --CORRES O TEU PROCEDIMENTO PARA IR BUSCAR A DISTANCIA
    --SE OS DADOS FOREM PARA INSERIR NUMA TABELA FAZES O INSERT AQUI
    DBMS_OUTPUT.PUT_LINE('ORIGEM '||P.IDPONTO||' DESTINO '||R.IDPONTO);
  END IF;
   END LOOP;
 END LOOP;
 --
END;

O resultado do procedimento foi este

ORIGEM 1 DESTINO 2

ORIGEM 1 DESTINO 3

ORIGEM 1 DESTINO 4

ORIGEM 2 DESTINO 3

ORIGEM 2 DESTINO 4

ORIGEM 3 DESTINO 4

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

existe uma "brincadeira" muito fácil para obter a lista que pretendes:

 select A.id,
        B.id
   from tabelaA as A,
        tabelaB as B
  where B.id > A.id
order by A.id, B.id

a distância tens de ser tu a enfiar porque não dás informação necessária ...


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KTachyon    276
KTachyon

Se utilizares postgres com postGIS, podes utilizar as funções GIS para te calcular as distâncias entre coordenadas. Isto para além de te permitir armazenar as coordenadas numa só coluna e pesquisar por raio.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo    1151
HappyHippyHippo

Se utilizares postgres com postGIS, podes utilizar as funções GIS para te calcular as distâncias entre coordenadas. Isto para além de te permitir armazenar as coordenadas numa só coluna e pesquisar por raio.

mysql também tem funcionalidades para isso, mas nunca usei ...

http://dev.mysql.com/doc/refman/5.7/en/spatial-extensions.html

  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.