「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 単一の MySQL クエリで複数のレコードとその関連データをフェッチするにはどうすればよいですか?

単一の MySQL クエリで複数のレコードとその関連データをフェッチするにはどうすればよいですか?

2024 年 11 月 3 日に公開
ブラウズ:723

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

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

PHP コードには、データベース テーブルから複数行のデータをフェッチするクエリがあります。 。ただし、複数の応答を取得しており、それらを複数のレコードを含む 1 つの応答にマージしたいと考えています。

これを実現するには、必要なテーブルで左結合を実行するようにクエリを変更する必要があります。学生データを取得する代わりに、科目データを取得し、左結合を使用して関連する学生情報を含めます。これにより、複数のテーブルの関連データを 1 つの応答に含めることができます。

更新されたクエリの例は次のとおりです:

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

このクエリ内:

  • FROM 句がフェッチする tbssubjects AS サブジェクトで始まるようになりました。サブクエリは、subjectid、subjectname、activepts、totalpts を計算するために使用されます。各科目レコードの sem1、sem2、sem3 の値。
  • このクエリを実行すると、複数の科目レコードを含む 1 つの応答が得られます。それぞれに必要な学生情報と計算された値が含まれます。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3