MySQL consulta de junção ajuda
-
19-08-2019 - |
Pergunta
Basicamente, eu tenho uma coisa consulta mysql como o seguinte:
mysql_query("SELECT n.title, v.value FROM posts n INNER JOIN votes v ON n.id = v.id");
E o que eu preciso fazer é agarrar o título da tabela de mensagens e o valor de voto atual da tabela de votos.
No momento, os votos não são armazenados na tabela de votos a menos que um voto acontece. Então todos os posts com 0 votos não são na tabela de votos.
Isso faz com que um erro que ele está tentando obter o valor título e votar onde o ID de pós = o ID valor voto. Se não houver qualquer registro na tabela de votos, então o valor deve retornar como NULL ou 0, mas no momento todo o retorno da consulta como nula, então eu não posso nem devolver o título.
Como posso corrigir isso tudo em uma consulta? Eu não quero ter que usar várias consultas ... Thanks:)
Solução
Use uma associação à esquerda em vez de um interior
Uma junção interna requer linhas correspondentes da mesa em ambos os lados da junção.
A LEFT JOIN (ou esquerda junção externa para usar seu nome completo) seleciona todas as linhas da tabela da esquerda, e então linhas correspondentes da direita, retornando valores nulos se não houver registros coincidentes na tabela à direita, assim como você está pedindo.
(Há também exterior direita junta-se, mas o mesmo efeito pode ser conseguido alterando as condições em torno da cláusula ON)
Outras dicas
SELECT n.title, v.value FROM posts n LEFT JOIN votes v ON n.id = v.id
n.title SELECT, v.value DE posts como n, votos como v ONDE n.id = v.id
Tente isso.