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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-31 22:20:18222ブラウズ

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

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

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

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

更新されたクエリの例を次に示します:

<code class="php">$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';</code>

このクエリ内:

  • FROM 句は、サブジェクト データをフェッチするために tbssubjects AS サブジェクトで始まるようになりました。
  • LEFT JOIN句は、tbssubjects テーブルと tbusers テーブルを結合して、対応するユーザー名を取得するために使用されます。
  • サブクエリは、各サブジェクト レコードの subjectid、subjectname、activepts、totalpts、sem1、sem2、および sem3 の値を計算するために使用されます。 .

このクエリを実行すると、複数の件名を含む 1 つの応答が返されます。それぞれのレコードには、必要な生徒情報と計算された値が含まれています。

以上が単一の MySQL クエリで複数のレコードとその関連データをフェッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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