"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo recuperar varios registros y sus datos relacionados en una única consulta MySQL?

¿Cómo recuperar varios registros y sus datos relacionados en una única consulta MySQL?

Publicado el 2024-11-03
Navegar:850

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

Devolver datos de respuesta múltiple en una sola respuesta

En su código PHP, tiene una consulta que recupera varias filas de datos de una tabla de base de datos . Sin embargo, está recibiendo múltiples respuestas y desea fusionarlas en una sola respuesta con múltiples registros.

Para lograr esto, debe modificar su consulta para realizar una combinación izquierda en las tablas necesarias. En lugar de obtener datos de los estudiantes, obtendrá datos de la materia e incluirá la información relevante del estudiante mediante uniones izquierdas. Esto le permitirá incluir datos relacionados de varias tablas en una sola respuesta.

Aquí hay un ejemplo de la consulta actualizada:

$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';

En esta consulta:

  • La cláusula FROM ahora comienza con tbsubjects AS sujetos a buscar datos del sujeto.
  • Las cláusulas LEFT JOIN se usan para unir la tabla tbsubjects con la tabla tbusers para obtener el nombre de usuario correspondiente.
  • Las subconsultas se usan para calcular el id del sujeto, el nombre del sujeto, los puntos activos y los totales , valores sem1, sem2 y sem3 para cada registro de materia.

Después de ejecutar esta consulta, obtendrá una respuesta única que contiene varios registros de materia, cada uno con la información necesaria del estudiante y los valores calculados.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3