ホームページ  >  記事  >  データベース  >  PHPで複数の応答データを1つの応答で返す方法は?

PHPで複数の応答データを1つの応答で返す方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 06:04:30413ブラウズ

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

複数の応答データを 1 つの応答で返す

ソリューション

データを 1 つの応答にマージし、期待される出力を返すには、次のアプローチを使用します。 :

  1. 必要に応じてさらに多くのユーザーを提供できることを示すために、userId 変数の名前を変更します ($userId から $userid1)。次に、それに応じて SQL ステートメントの WHERE 句とバインディング配列を拡張します。
  2. 必要なフィールドを計算するように SQL ステートメントを変更します。
<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. ユーザーをフェッチします。 ' fetchAll メソッドを使用してリストをオブジェクトの配列として取得します。
  2. 結果の処理:

ユーザーのリストが空の場合は、JSON 形式でエラー メッセージを返します:

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

それ以外の場合は、JSON エンコードされたユーザーのリストを返します。

使用法

件名テーブルが最初の説明と同じ構造であると仮定すると、次のスクリプトを使用できます。必要なデータをフェッチしてフォーマットするには:

<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>

注:

このスクリプトは、データベース対話用のメソッドを提供する DbAdapter クラスがあることを前提としています。このクラスは、接続の確立、ステートメントの準備、およびデータの取得を処理する必要があります。

以上がPHPで複数の応答データを1つの応答で返す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。