Jump to content
eunito

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

Recommended Posts

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!

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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

  • Vote 1

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.