Maison  >  Article  >  base de données  >  Comment renvoyer des données à réponses multiples en une seule réponse en PHP ?

Comment renvoyer des données à réponses multiples en une seule réponse en PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 06:04:30332parcourir

How to Return Multiple Response Data in One Response in PHP?

Renvoyer les données à réponses multiples en une seule réponse

Solution

Pour fusionner les données en une seule réponse et renvoyer le résultat attendu, utilisez l'approche suivante :

  1. Renommer la variable userId (de $userId à $userid1) pour démontrer que vous pouvez fournir plus d'utilisateurs si nécessaire. Ensuite, étendez la clause WHERE dans l'instruction SQL et le tableau de liaisons en conséquence.
  2. Modifiez l'instruction SQL pour calculer les champs nécessaires :
<code class="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 = :userid1 
            GROUP BY subjects.userid 
            ORDER BY subjects.time DESC;</code>
  1. Récupérez les utilisateurs ' sous forme de tableau d'objets à l'aide de la méthode fetchAll.
  2. Gérer les résultats :

Si la liste des utilisateurs est vide, renvoyer un message d'erreur au format JSON :

<code class="php">$response->getBody()->write(
    '{
        "error": {
            "message":"Invalid"
        }
    }'
);</code>

Sinon, renvoyez la liste des utilisateurs encodée en JSON.

Utilisation

En supposant que votre table de sujets ait la même structure que dans votre description initiale, vous pouvez utiliser le script suivant pour récupérer et formater les données requises :

<code class="php"><?php

$userid1 = 1; // Replace this with the actual user ID

// SQL statement
$sql = 'SELECT ... FROM ... WHERE subjects.userid = :userid1 GROUP BY ... ORDER BY ...';

// Bindings
$bindings = array(
    ':userid1' => $userid1
);

// Fetch users
$users = $dbAdapter->fetchAll($sql, $bindings);

// Handle results
if (empty($users)) {
    // Handle empty users list
} else {
    // Handle users list
}</code>

Remarque :

Le script suppose que vous disposez d'une classe DbAdapter qui fournit des méthodes pour les interactions avec la base de données. Cette classe doit gérer l'établissement de la connexion, la préparation des instructions et la récupération des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn