Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql/php:mostra posts e para cada post todos os comentários


Não conhecendo sua estrutura de banco de dados, deve ser algo assim. Observe que você deve substituir o * caracteres com listas de colunas mais explícitas que você realmente precisa.
SELECT p.*, c.*, u.* FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id

Observe que, se você está apenas tentando obter contagens, somas e coisas assim, é uma boa ideia armazenar em cache algumas dessas informações. Por exemplo, você pode querer armazenar em cache a contagem de comentários na tabela de postagem em vez de contá-los a cada consulta. Apenas conte e atualize a contagem de comentários ao adicionar/remover um comentário.

EDITAR: Percebi que você também queria anexar dados do usuário a cada comentário. Você pode JOIN na mesma tabela mais de uma vez, mas fica feio. Isso pode se transformar em uma consulta muito cara. Também estou incluindo um exemplo de como criar alias para colunas para que seja menos confuso:
SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
LEFT JOIN users u2 ON u2.id = c.author_id