speedftw Posted August 22, 2012 at 08:06 PM Report Share #473187 Posted August 22, 2012 at 08:06 PM 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 More sharing options...
HappyHippyHippo Posted August 22, 2012 at 08:11 PM Report Share #473190 Posted August 22, 2012 at 08:11 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
speedftw Posted August 22, 2012 at 09:39 PM Author Report Share #473196 Posted August 22, 2012 at 09:39 PM 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 More sharing options...
HappyHippyHippo Posted August 22, 2012 at 09:52 PM Report Share #473197 Posted August 22, 2012 at 09:52 PM faz multiplos left joins ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
speedftw Posted August 22, 2012 at 10:04 PM Author Report Share #473198 Posted August 22, 2012 at 10:04 PM Eu tentei com um LEFT JOIN mas vão aparecer os campos a NULL, o que eu não quero que aconteça porque depois para escrever o ficheiro dá barraca. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted August 22, 2012 at 10:06 PM Report Share #473199 Posted August 22, 2012 at 10:06 PM (edited) faz post do teu ER e ja agora do SQL que tens Edited August 22, 2012 at 10:07 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
speedftw Posted August 26, 2012 at 02:44 PM Author Report Share #473542 Posted August 26, 2012 at 02:44 PM Eu só quero saber como é que posso juntar numa só tabela os resultados de várias queries, independentemente do que as queries são. Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted August 26, 2012 at 05:38 PM Report Share #473561 Posted August 26, 2012 at 05:38 PM faz post do teu ER e ja agora do SQL que tens IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
speedftw Posted August 26, 2012 at 07:34 PM Author Report Share #473574 Posted August 26, 2012 at 07:34 PM $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 More sharing options...
HappyHippyHippo Posted August 26, 2012 at 08:29 PM Report Share #473584 Posted August 26, 2012 at 08:29 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
speedftw Posted August 26, 2012 at 08:47 PM Author Report Share #473585 Posted August 26, 2012 at 08:47 PM Eu sei que o SQL é uma confusão mas é mesmo assim. Não tenho nenhum ER, eu não consigo é meter o resultado disso como pretendo... Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted August 26, 2012 at 09:11 PM Report Share #473589 Posted August 26, 2012 at 09:11 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
speedftw Posted August 26, 2012 at 09:20 PM Author Report Share #473590 Posted August 26, 2012 at 09:20 PM Obrigado vou experimentar a 2ªopção. Não é não querer corrigir, não posso mesmo. A base de dados foi criada e preenchida desta forma e quem a criou recusa-se a aplicar as sugestões que dei, nomeadamente ter as Foreign Keys preenchidas para não dar esta confusão de queries. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now