Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengambil Berbilang Rekod dan Data Berkaitannya dalam Satu Pertanyaan MySQL?

Bagaimana untuk Mengambil Berbilang Rekod dan Data Berkaitannya dalam Satu Pertanyaan MySQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 22:20:18298semak imbas

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

Mengembalikan Berbilang Data Respons dalam Satu Respons

Dalam kod PHP anda, anda mempunyai pertanyaan yang mengambil berbilang baris data daripada jadual pangkalan data . Walau bagaimanapun, anda mendapat berbilang respons dan anda ingin menggabungkannya menjadi satu respons dengan berbilang rekod.

Untuk mencapai ini, anda perlu mengubah suai pertanyaan anda untuk melakukan gabungan kiri pada jadual yang diperlukan. Daripada mengambil data pelajar, anda akan mengambil data subjek dan memasukkan maklumat pelajar yang berkaitan menggunakan gabungan kiri. Ini akan membolehkan anda memasukkan data berkaitan daripada berbilang jadual dalam satu respons.

Berikut ialah contoh pertanyaan yang dikemas kini:

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

Dalam pertanyaan ini:

  • Klausa FROM kini bermula dengan tbsubjek AS subjek untuk mengambil data subjek.
  • Klausa LEFT JOIN digunakan untuk menyertai jadual tbsubjects dengan jadual tbusers untuk mengambil nama pengguna yang sepadan.
  • The subkueri digunakan untuk mengira nilai subjeksid, nama subjek, activepts, totalpts, sem1, sem2 dan sem3 untuk setiap rekod subjek.

Selepas melaksanakan pertanyaan ini, anda akan mendapat satu respons yang mengandungi berbilang rekod subjek , setiap satu dengan maklumat pelajar yang diperlukan dan nilai yang dikira.

Atas ialah kandungan terperinci Bagaimana untuk Mengambil Berbilang Rekod dan Data Berkaitannya dalam Satu Pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn