"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية جلب سجلات متعددة والبيانات المرتبطة بها في استعلام MySQL واحد؟

كيفية جلب سجلات متعددة والبيانات المرتبطة بها في استعلام MySQL واحد؟

تم النشر بتاريخ 2024-11-03
تصفح:172

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

إرجاع بيانات الاستجابة المتعددة في استجابة واحدة

في كود 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';

في هذا الاستعلام:

  • تبدأ جملة FROM الآن بـ tbsubjects كمواضيع لجلبها بيانات الموضوع.
  • يتم استخدام عبارات LEFT JOIN للانضمام إلى جدول tbsubjects مع جدول tbusers لجلب اسم المستخدم المقابل.
  • يتم استخدام الاستعلامات الفرعية لحساب معرف الموضوع، اسم الموضوع، activepts، Totalpts وقيم sem1 وsem2 وsem3 لكل سجل مادة.

بعد تنفيذ هذا الاستعلام، سوف تحصل على استجابة واحدة تحتوي على سجلات مواد متعددة، كل منها يحتوي على معلومات الطالب الضرورية والقيم المحسوبة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3