Eu adicionei uma resposta à pergunta anterior, por favor, consulte-a primeiro, para compreensão.
Você não pode obtê-lo em
bb_ratings
sozinho agrupando-o e hackeando-o. Você obtém Null porque está pensando em termos de uma grade, não de conjuntos relacionais (esse é o conceito central do Modelo Relacional). -
Antes de decidir para qual(is) tabela(s) ir, para atender sua consulta, você precisa decidir o que deseja para a estrutura do seu conjunto de resultados.
-
Em seguida, restrinja (quais linhas) com oWHERE
cláusula.
-
Em seguida, descubra de onde (quais tabelas) obter as colunas. Ou se junta a mais tabelas e mais trabalho noWHERE
cláusula; ou subconsultas escalares, correlacionadas com a consulta externa.
Você não está claro sobre o que você quer. Parece que você quer o mesmo relatório da pergunta anterior, além de uma coluna para o voto dos usuários. Para mim, a estrutura do seu conjunto de resultados é uma lista de boletins. Bem, eu posso pegar isso no
bulletin
, não é necessário acessar bulletin_like
e então tem que GROUP isso. Se você pensa em termos de conjuntos, é muito fácil, não há necessidade de pular aros com visualizações materializadas ou consultas "aninhadas":
SELECT name AS bulletin,
(SELECT COUNT(like)
FROM bulletin_like bl
WHERE bl.bulletin_id = b.bulletin_id
AND like = 1
) AS like,
(SELECT COUNT(like)
FROM bulletin_like bl
WHERE bl.bulletin_id = b.bulletin_id
AND like = 0
) AS dislike,
(SELECT COUNT(like)
FROM bulletin_like bl
WHERE bl.bulletin_id = b.bulletin_id
AND bl.user_id = {$user_d}
AND like = 1
) AS your_vote
FROM bulletin b
Respostas a comentários
Tenho a sensação de que o que você está dizendo é muito importante para a forma como abordo o SQL
-
Sim absolutamente. Se você estiver disposto a aprender as coisas certas de antemão, ele irá:
- poupar todos os tipos de problemas mais tarde
- torne suas consultas mais eficientes
- permite que você codifique mais rápido
.
-
Por enquanto, esqueça o uso de conjuntos de resultados como tabelas (muito mais lentas) e tabelas temporárias (definitivamente não necessárias se seu banco de dados for Normalizado). Você é muito melhor consultar as tabelas diretamente. Você precisa aprender vários assuntos como o modelo Relacional; como usar SQL; como não usar SQL para evitar problemas; etc. Estou disposto a ajudá-lo e ficar com você por um tempo, mas preciso saber se você está disposto. Vai demorar um pouco de ida e volta. Há um pouco de barulho neste site, então vou ignorar outros comentários (até o final) e responder apenas ao seu.
- parar de usar
GROUP BY
, está prejudicando seriamente sua compreensão do SQL. Se você não conseguir obter o relatório desejado sem usarGROUP BY
, faça uma pergunta.
.
- parar de usar
-
Esta pergunta postada. Deixe-me saber em que ponto você se perdeu, e eu fornecerei mais detalhes a partir desse ponto.
- Para esta pergunta, você quer uma lista de boletins, com curtidas; não gosta; e isso os usuários gostam. Isso está correto? Você tentou o código que eu forneci?
.
- Para esta pergunta, você quer uma lista de boletins, com curtidas; não gosta; e isso os usuários gostam. Isso está correto? Você tentou o código que eu forneci?
- Olhei para a pergunta vinculada. É uma bagunça, e ninguém abordou o problema mais profundo; eles responderam ao problema na superfície, isoladamente. Agora você tem uma resposta, mas não a entende. Essa é uma maneira muito lenta de progredir.