Jump to content

Múltiplas queries para Array 2D


speedftw

Recommended Posts

Boas!

Estou a usar php em conjunto com uma base de dados PostgreSQL para gerar um ficheiro de texto com algumas das informações que lá existem.

Tenho de executar diferentes queries e independentes entre si. Apesar de algumas queries terem tabelas semelhantes não é possível fazer JOIN de tudo porque as Foreign Keys de muitas entradas não estão preenchidas.

O que eu pretendia fazer era colocar todos os resultados das queries num mesmo array 2D (tabela) para que depois pudessem ser acedidos e escritos para o ficheiro.

Ficaria algo do género:

Campos retornados Query 1: id, nome, longitude, latitude

Campos retornados Query 2: modelo, altura, zona, distrito

id | nome | longitude | latitude | modelo | altura | zona | distrito

1 LX 39,2 -8.1 Astra 1.6 A LX

2 VNG 40 -7.9 Clio 1.82 H PT

3 SNT ... ... ... ... ... ...

.....

A partir daqui tirava os dados para o ficheiro com um ciclo for.

Obrigado

Link to comment
Share on other sites

Tenho de executar diferentes queries e independentes entre si. Apesar de algumas queries terem tabelas semelhantes não é possível fazer JOIN de tudo porque as Foreign Keys de muitas entradas não estão preenchidas.

acho isso muito estranho, isso porque se as foreign keys não forem preenchidas, como fazes a relação ??

se disseres que não tem e mesmo assim queres apresentar o registo usa "LEFT JOIN"

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Uma das tabelas da base de dados tem, para um mesmo id que eu quero representar, várias entradas que dependem da fonte. Cada fonte preencheu apenas alguns campos.

Para conseguir obter todas as informações que preciso tenho de percorrer vários "caminhos" através da base de dados.

É algo do género:

Campos da tabela infos_spec:

-id

-id_local

-modelo

-fonte

-latitude

-longitude

-zona distrito

Exemplo:

id | id_local | modelo | fonte | latitude | longitude | zona | distrito

1 10 Clio 1 NULL NULL A NULL

2 10 NULL 2 37,2 -8.2 NULL PT

3 27 Astra 1 NULL NULL J NULL

Eu quero fazer o array que expliquei no 1º post em que os dados com id_local seja igual fiquei todos na mesma linha.

E quero que fique ainda nessa mesma linha os dados referentes a esse id_local que não entram nestas queries e que estão localizados em outras tabelas.

Link to comment
Share on other sites

$data_query_1 = pg_query("SELECT c.numero, b.latitude, b.longitude

FROM Linha AS a

JOIN NumeroLinha AS c

ON c.linha = a.id

JOIN info_spec AS b

ON b.id = c.TowerInstance

WHERE a.codigo = '$c[linha]'

ORDER BY c.numero");

$data_query_2 = pg_query("SELECT c.modelo, c.zona, c.altura, c.distrito

FROM Linha AS a

JOIN Numero_info_spec AS b

ON b.linha=a.id

JOIN info_spec AS c

ON c.id=b.id_spec

JOIN NumeroLinha AS d

ON d.id_local=c.id_local

WHERE a.codigo = '$c[linha]'

ORDER BY b.numero");

Isto está num ciclo que vai mudando a variável $c[linha]

Link to comment
Share on other sites

então o ER ???

a ver o teu SQL isso parece uma confusão total !!!

tens : Linha.id <-> NumeroLinha.linha / NumeroLinha.id_spec <-> info_spec.id

e tens : Linha.id <-> Numero_info_spec.linha / Numero_info_spec.id_spec <-> info_spec.id / info_spec.id_local <-> NumeroLinha.id_local

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

se não queres corrigir a bronca que é o teu SQL, tens duas soluções.

1 - adiciona os joins do segundo query ao primeiro (corrigindo obviamente os nomes auxiliares das tabelas), isto porque tens o elemento comum aos doias querys:

WHERE Linha.codigo = '$c[linha]'

2 - continuas a fazer os dois querys distintos e fazes a junção dos dados em PHP

$rs_query1 = ...
$rs_query2 = ...
$result = array();
foreach ($re_query1 as $record)
 $result[$record['codigo']] = array('codigo' => $record['codigo'],
                                    'numero' => $record['numero'],
                                    ...);

foreach ($re_query2 as $record)
{
 $result[$record['codigo']]['modelo'] = $record['modelo'];
 ...
}

Nota : os "..." serve somente para dizer que vem mais código, eu é que não tenho paciência para o escrever aqui

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
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.