PHP + MySQL: diferentes métodos de acesso aoMySQL + master-detailCarlos SantosLabMM 4 - NTC - DeCA - UAAula 17, 02-05-2013
Diferentes métodos de acesso ao MySQLEm PHP existem pelo 3 métodos principais de acesso ao MySQL:• PHP’s MySQL Extension: ...
Diferenças entre as APIshttp://www.php.net/manual/en/mysqlinfo.api.choosing.php
Diferenças entre as APIs
Visualizar dados de várias tabelasQuando queremos visualizar dados que estão distribuídos por duastabelas ligadas entre si...
Base de dados para exemplos seguintes
Listar os mariachis$query = "SELECT idMariachi, nome FROM Mariachi";$rsMari = mysql_query($query , $connection);while ($ro...
Listar os mariachis com a respetiva família$query = "SELECT Mariachi.idMariachi, Mariachi.nome,Familia.nomeFamilia FROM Ma...
Listar os mariachis com família (not so good)$query = "SELECT idMariachi, nome, Familia_idFamilia FROMMariachi";$rsMari = ...
ObservaçõesUma página pode ter muitos recordsetsOs valores obtidos num recordset podem ser utilizados para filtrarresultado...
master - detailNesta estrutuura de informação temos:• uma página master que lista vários tópicos de um modo genérico;• uma...
Exemplo: master-detailmaster: listar todas as famíliasdetail: listar os mariachis dessa família
Exemplo: master > familias.php$qFami = "SELECT * FROM Familia";$rsFami = mysql_query($qFami , $connection);while ($row_rsF...
Exemplo: detail > mariachisFamilia.php$idValue = intval($_GET[id]);$qMari = "SELECT * FROM MariachiWHERE Familia_idFamilia...
Exemplo: master-detail (parte 2)master: listar todas as famíliasdetail: listar os mariachis dessa famíliae incluir o númer...
Exemplo: master-detail (parte 2)Soluções a discutir:• um query único baseado num INNER JOIN entre Mariachis eMariachi_has_...
Exemplo: master-detail (parte 2)Problema com query único, típico destas situações:• se um Mariachi não tiver uma ocorrênci...
Exemplo: master-detail (parte 2)Por vezes é necessário ter partes do código que só são executadas se umdeterminado records...
Upcoming SlideShare
Loading in …5
×

LabMM4 (T17 - 12/13)

960 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
960
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
67
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

LabMM4 (T17 - 12/13)

  1. 1. PHP + MySQL: diferentes métodos de acesso aoMySQL + master-detailCarlos SantosLabMM 4 - NTC - DeCA - UAAula 17, 02-05-2013
  2. 2. Diferentes métodos de acesso ao MySQLEm PHP existem pelo 3 métodos principais de acesso ao MySQL:• PHP’s MySQL Extension: é o método “histórico” e só permite acessoprocedimental. Já não é atualizado e vai deixar de ser suportado emfuturas versões do PHP (v5.5);• PHP’s mysqli Extension: é uma versão para substituir a versão “histórica”e disponibiliza versões procedimental e orientada a objetos. Tem umamelhor performance e mais métodos;• PDO (PHP Data Objects): é uma camada de abstração para bases dedados com suporte para MySQL e muitos outros SGBDR. Só tem versãoorientada a objetos. Em teoria, permite mudar de SGBDR sem sernecessário alterar o código...http://www.php.net/manual/en/mysqli.overview.php
  3. 3. Diferenças entre as APIshttp://www.php.net/manual/en/mysqlinfo.api.choosing.php
  4. 4. Diferenças entre as APIs
  5. 5. Visualizar dados de várias tabelasQuando queremos visualizar dados que estão distribuídos por duastabelas ligadas entre si, podemos:• criar uma query baseado num JOIN que permita obter todos os dados;• criar vários recordsets de acordo com a informação necessária a mostrarna páginaA solução adequada depende da situação a que se aplica!
  6. 6. Base de dados para exemplos seguintes
  7. 7. Listar os mariachis$query = "SELECT idMariachi, nome FROM Mariachi";$rsMari = mysql_query($query , $connection);while ($row_rsMari = mysql_fetch_assoc($rsMari)){echo $row_rsMari[“nome"];}
  8. 8. Listar os mariachis com a respetiva família$query = "SELECT Mariachi.idMariachi, Mariachi.nome,Familia.nomeFamilia FROM Mariachi INNER JOIN Familia ONMariachi.Familia_idFamilia = Familia.idFamilia";$rsMari = mysql_query($query , $connection);while ($row_rsMari = mysql_fetch_assoc($rsMari)){echo $row_rsMari[“nome"].” - “.$row_rsMari[“nomeFamilia”].”<br/>”;}
  9. 9. Listar os mariachis com família (not so good)$query = "SELECT idMariachi, nome, Familia_idFamilia FROMMariachi";$rsMari = mysql_query($query , $connection);while ($row_rsMari = mysql_fetch_assoc($rsMari)){$qFami = "SELECT nomeFamilia FROM Familia WHEREidFamilia = ".$row_rsMari[“Familia_idFamilia”];$rsFami = mysql_query($qFami , $connection);$row_rsFami = mysql_fetch_assoc($rsFami);echo $row_rsMari[“nome"].” - “.$row_rsFami[“nomeFamilia].”<br/>”;}
  10. 10. ObservaçõesUma página pode ter muitos recordsetsOs valores obtidos num recordset podem ser utilizados para filtrarresultados a obter noutro recordsetSoluções com múltiplos acessos há BD são, normalmente, mais lentasNo entanto, existem circunstâncias em que a quantidade de informaçãoresultante de um INNER JOIN pode justificar a opção por múltiplosqueries!
  11. 11. master - detailNesta estrutuura de informação temos:• uma página master que lista vários tópicos de um modo genérico;• uma página detail que permite ver os detalhes do tópico escolhido napágina masterQue informação é necessário transferir entre as páginas?masteritem1item2item3detaildetalhes do itemescolhido na páginamastervoltarquerystring: id_item.../page.php?a=5
  12. 12. Exemplo: master-detailmaster: listar todas as famíliasdetail: listar os mariachis dessa família
  13. 13. Exemplo: master > familias.php$qFami = "SELECT * FROM Familia";$rsFami = mysql_query($qFami , $connection);while ($row_rsFami = mysql_fetch_assoc($rsFami)){$line = ‘<p><a href=”mariachisFamilia.php?id=’.$row_rsFami[“idFamilia”].’”>’.$row_rsFami[“nomeFamilia"].‘</a></p>’;echo $line;}os URLs na página ficam com o formato: “mariachisFamilia.php?id=3”
  14. 14. Exemplo: detail > mariachisFamilia.php$idValue = intval($_GET[id]);$qMari = "SELECT * FROM MariachiWHERE Familia_idFamilia = ".$idValue;$rsMari = mysql_query($qMari , $connection);while ($row_rsMari = mysql_fetch_assoc($rsMari)){$line = ‘<p>$row_rsMari[“nome”]</p>’;echo $line;}Como mostrar nesta página o nome da família?• um recordset baseado numa query com join ou dois recordsets?
  15. 15. Exemplo: master-detail (parte 2)master: listar todas as famíliasdetail: listar os mariachis dessa famíliae incluir o número de relacionamentos com chicas
  16. 16. Exemplo: master-detail (parte 2)Soluções a discutir:• um query único baseado num INNER JOIN entre Mariachis eMariachi_has_chica com operação de COUNT e filtragem pelo Mariachi?• um query para o nome do Mariachi e um query para contar o número deregistos do Mariachi em Mariachi_has_Chica?
  17. 17. Exemplo: master-detail (parte 2)Problema com query único, típico destas situações:• se um Mariachi não tiver uma ocorrência em Mariachi_has_Chica oresultado será um recordset vazio! Porquê?• logo, não será possível mostrar os dados da informação pessoal doMariachiNeste cenário, a solução a adotar deve ser a segunda!... ou ainda melhor... uma solução com OUTER JOIN• TPC -> implementar esta solução :)
  18. 18. Exemplo: master-detail (parte 2)Por vezes é necessário ter partes do código que só são executadas se umdeterminado recordset está ou não vazio. Essas zonas são designadaspor zonas condicionais.Por exemplo:• se o mariachi nunca teve relacionamentos devemos apresentar umamensagem adequada: “este mariachi não é um bom exemplo :(”• nos outros casos mostrar o número de relacionamentoscomo implementar este tipo de condição?• if ($rsName) ... // se existirem resultados ...

×