Rumah  >  Artikel  >  pangkalan data  >  Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan artikel yang anda sediakan: * Bagaimana untuk Menggabungkan Mata Pelajaran Pelajar ke dalam Satu Rekod dengan JOIN dan Subkueri KIRI? * Mewujudkan Struktur Data Pelajar Bersepadu dengan

Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan artikel yang anda sediakan: * Bagaimana untuk Menggabungkan Mata Pelajaran Pelajar ke dalam Satu Rekod dengan JOIN dan Subkueri KIRI? * Mewujudkan Struktur Data Pelajar Bersepadu dengan

Susan Sarandon
Susan Sarandonasal
2024-10-26 23:01:31644semak imbas

Here are a few question-based titles that fit your provided article:

* How to Merge Student Subjects into One Record with a LEFT JOIN and Subqueries?
* Creating a Unified Student Data Structure with Subjects and Semester Scores: A SQL Query Approach
* Ef

kembalikan berbilang data respons dalam satu respons

Dalam soalan sebelum ini saya bertanya tentang cara menggabungkan semua subjek semua semester kepada satu rekod supaya setiap pelajar harus menjadi satu respons dan datanya akan menjadi seperti contoh ini:

<code class="json">[
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "bio", - current subject name 
"activepts": "652", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
}
]</code>

Jadi saya mendapat satu dan hanya satu jawapan tetapi jawapannya tidak memberitahu saya bagaimana untuk melakukannya cuma memberitahu saya sebab mengapa saya perlu menggunakan LEFT JOIN dan terangkan kepada saya perkara yang LEFT JOIN akan lakukan dalam kes saya, jadi saya akan menerangkan sekali lagi perkara yang perlu saya lakukan kemudian saya akan menerangkan cara melakukan ini melalui kod dan beberapa contoh:

Itu utama untuk keseluruhan operasi :

1- Setiap pelajar akan menjadi satu respons
2- setiap respons mengandungi semua subjeknya, setiap subjek akan menjadi satu baris
3- Baris pertama akan mengandungi beberapa data statik untuk pelajar:

  • id pengguna: id pengguna dalam pengguna jadual
  • nama pengguna: nama pengguna dalam pengguna jadual
  • subjectsid: id subjek pertama pelajar ini
  • nama subjek: nama subjek semasa untuk baris ini sekarang
  • activepts: mata subjek semasa
  • totalpts: jumlah mata untuk pelajar ini dalam semua mata pelajaran
  • sem1, sem2, sem3: jumlah mata pelajar ini pada setiap semester

4- Selebihnya baris sama seperti apa yang saya perolehi daripada DB dan tidak perlu tukar sesuatu kecuali tapis subjek hanya untuk pengguna ini

Kod untuk melakukan operasi ini:

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

    $bindings = array(
        ':userid' => $userID,
    );

    $users = $statement->fetchAll(PDO::FETCH_OBJ);</code>

Terangkan kod:
1- Medan dalam pernyataan SELECT, seperti yang anda lihat ia dibahagikan kepada 2 kumpulan yang pertama di bahagian atas adalah medan statik untuk pelajar, selebihnya akan mendapat nilai daripada table tbsubjects
2- Fungsi LEFT JOIN bertanggungjawab untuk mendapatkan semua (userid) daripada jadual tbsubjects dan gabungkannya dengan kekunci biasa di antara mereka userid, yang bermaksud kini setiap pengguna akan diwakili oleh sekurang-kurangnya satu baris mengandungi subjek pertamanya ( ORDER BY id ASC ) kemudian semua subjeknya yang lain, tetapi mereka yang telah digabungkan dalam satu baris akan diulang dalam baris yang lain kerana medan statik pelajar tersebut

Contoh untuk output:

<code class="json">[
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "bio", - current subject name 
"activepts": "652", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
},
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "phy", - current subject name 
"activepts": "10", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
},
{
"userid": "1", - from users table
"username": "joe",  - from users table 
"subjectsid": "1", - first subject id for the student in this case the one for phy
"subjectname": "math", - current subject name 
"activepts": "33", - points of current month
"totalpts": "717", - total points of all subjects for this student
"sem1": "32", - total points of all subjects for this student of semester 1
"sem2": "0", - total points of all subjects for this student of semester 2
"sem3": "685", - total points of all subjects for this student of semester 3
}
]</code>

Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan artikel yang anda sediakan: * Bagaimana untuk Menggabungkan Mata Pelajaran Pelajar ke dalam Satu Rekod dengan JOIN dan Subkueri KIRI? * Mewujudkan Struktur Data Pelajar Bersepadu dengan. 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