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:)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top