"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como buscar vários registros e seus dados relacionados em uma única consulta MySQL?

Como buscar vários registros e seus dados relacionados em uma única consulta MySQL?

Publicado em 2024-11-03
Navegar:355

 How to Fetch Multiple Records and Their Related Data in a Single MySQL Query?

Retornando dados de múltiplas respostas em uma resposta

Em seu código PHP, você tem uma consulta que busca múltiplas linhas de dados de uma tabela de banco de dados . No entanto, você está obtendo várias respostas e deseja mesclá-las em uma única resposta com vários registros.

Para conseguir isso, você precisa modificar sua consulta para realizar uma junção à esquerda nas tabelas necessárias. Em vez de buscar os dados dos alunos, você buscará os dados da disciplina e incluirá as informações relevantes dos alunos usando junções à esquerda. Isso permitirá que você inclua dados relacionados de várias tabelas em uma única resposta.

Aqui está um exemplo da consulta atualizada:

$sql = 'SELECT 
                subjects.userid,
                users.name AS username,
                (
                    SELECT id 
                    FROM tbsubjects 
                    WHERE userid = subjects.userid 
                    ORDER BY id ASC 
                    LIMIT 1
                ) AS subjectsid,
                (
                    SELECT name 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        ORDER BY time DESC
                        LIMIT 1
                ) AS subjectname,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND month = DATE_FORMAT(NOW(), "%c")
                ) AS activepts,
                IFNULL(SUM(subjects.points), 0) AS totalpts,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 1
                ) AS sem1,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 2
                ) AS sem2,
                (
                    SELECT IFNULL(SUM(points), 0) 
                    FROM tbsubjects 
                    WHERE 
                        userid = subjects.userid 
                        AND semester = 3
                ) AS sem3 
            FROM 
                tbsubjects AS subjects 
                LEFT JOIN tbusers AS users ON users.id = subjects.userid 
            WHERE subjects.userid = :userid GROUP BY subjects.userid ORDER BY subjects.time DESC';

Nesta consulta:

  • A cláusula FROM agora começa com tbsubjects AS assuntos a serem buscados dados do assunto.
  • As cláusulas LEFT JOIN são usadas para unir a tabela tbsubjects com a tabela tbusers para buscar o nome de usuário correspondente.
  • As subconsultas são usadas para calcular o subjectid, subjectname, activepts, totalpts valores , sem1, sem2 e sem3 para cada registro de disciplina.

Depois de executar esta consulta, você obterá uma única resposta contendo vários registros de disciplinas, cada um com as informações necessárias do aluno e valores calculados.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3