Obtenção de dados de tabelas relacionadas em PHP
Vamos fazer uma consulta que irá buscar
todos os usuários junto com suas cidades. Para isso
precisaremos do comando LEFT
JOIN:
Sua sintaxe é a seguinte:
SELECT campos FROM nome_da_tabela
LEFT JOIN nome_da_tabela_relacionada ON condição_de_ligação
WHERE condição_de_seleção
Vamos analisar as partes individuais da sintaxe deste comando.
Campos
Como a seleção é feita a partir de várias tabelas,
selecionar todos os campos através de * não
funcionará. A seguinte consulta selecionará campos apenas
da tabela principal, mas não da tabela relacionada:
SELECT *
Para que os dados sejam selecionados de todas
as tabelas, é necessário especificar o nome
da tabela antes de * para a seleção:
SELECT users.*, cities.*
Ou pode-se listar os campos que precisamos especificando o nome da tabela antes deles:
SELECT users.name, cities.name
Estas duas formas têm um problema. O fato é que, se os campos nas tabelas tiverem os mesmos nomes, ocorrerá um conflito de nomes no array PHP e apenas um campo prevalecerá, e o segundo não estará presente.
Para resolver o problema, é necessário renomear
os nomes em conflito usando o comando as:
SELECT users.name, cities.name as city_name
Ligação
Após o comando ON, devemos especificar
os campos das duas tabelas pelos quais a ligação
é feita. No nosso caso, será o campo id
da tabela de cidades e o campo city_id
da tabela de usuários:
ON cities.id=users.city_id
Consulta
No final, a consulta que irá buscar os usuários junto com suas cidades ficará da seguinte forma:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Tarefas práticas
Suponha que você tenha uma tabela de produtos e uma tabela de suas categorias. Escreva uma consulta que busque os nomes dos produtos junto com suas categorias.