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
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:
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:
4- Selebihnya baris sama seperti apa yang saya perolehi daripada DB dan tidak perlu tukar sesuatu kecuali tapis subjek hanya untuk pengguna 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
<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!