قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  تشغيل/ كيف نحسب كل الصفوف في mysql. إحضار الصفوف وعدّها في استعلام واحد - SQL_CALC_FOUND_ROWS

كيف نحسب كل الصفوف في MySQL. إحضار الصفوف وعدّها في استعلام واحد - SQL_CALC_FOUND_ROWS

بدءًا من الإصدار 4.0 ، يتوفر لدى MySQL DBMS ما يكفي فرصة مناسبةحساب عدد جميع السجلات المؤهلة للطلب عندما يكون عدد السجلات محدودًا بـ LIMIT. عند العمل باستخدام بحث في قاعدة البيانات ، وكذلك عند إجراء التحديدات من الجداول ذات كمية كبيرةالسجلات ، فهذه الوظيفة ضرورية ببساطة.

بناء الجملة. في استعلام التحديد ، يجب تحديد خيار SQL_CALC_FOUND_ROWS قبل قائمة الأعمدة. هذه هي بداية بناء جملة جملة SELECT.

تحديد




select_expr ، ... ...

وهكذا ، عن طريق العمل حدد الاستعلام SQL_CALC_FOUND_ROWS سيحسب نظام DBMS العدد الإجمالي للصفوف المطابقة لشرط الاستعلام ويخزن هذا الرقم في الذاكرة. بطبيعة الحال ، فإن استعلام SELECT SQL_CALC_FOUND_ROWS يكون منطقيًا فقط عند استخدام القيد (LIMIT). مباشرة بعد تنفيذ استعلام تحديد للحصول على عدد السجلات ، تحتاج إلى تنفيذ استعلام SELECT آخر: SELECT FOUND_ROWS () ؛. نتيجة لذلك ، ستعيد MySQL صفًا واحدًا بحقل واحد ، والذي سيخزن عدد الصفوف.

مثال على الطلبات نفسها:

> حدد SQL_CALC_FOUND_ROWS * من tbl_name حيث الرقم> 100 حد 10 ؛
> تحديد FOUND_ROWS () ،

سيعيد الاستعلام الأول (طباعة) 10 صفوف من جدول tbl_name الذي يكون رقم الشرط الخاص به> 100 صحيحًا. وسيعيد الاستدعاء الثاني لأمر SELECT عدد الصفوف التي كان من الممكن أن يُرجعها أمر SELECT الأول إذا تمت كتابته بدون شرط التحديد. على الرغم من أن استخدام الأمر SELECT SQL_CALC_FOUND_ROWS يتطلب من MySQL إعادة حساب جميع الصفوف في مجموعة النتائج ، إلا أن هذه الطريقة لا تزال أسرع من دون LIMIT ، نظرًا لأنها لا تحتاج إلى إرسال النتيجة إلى العميل.

طلبات عينة من PHP:

نتيجة $ = mysql_query ("SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT 0، 10"، $ link)؛
while ($ row = mysql_fetch_assoc ($ result))
{
var_dump ($ row) ،
}

نتيجة $ = mysql_query ("SELECT FOUND_ROWS ()"، $ link)؛
num_rows = mysql_result ($ نتيجة، 0)؛
صدى "$ num_rows Rows \ n"؛

كنتيجة لتنفيذ الكود ، بشرط أن يشير $ link إلى اتصال مفتوح بنظام DBMS ، ستخرج PHP 10 صفوف من table1 ، ثم قيمة عدد صحيح لعدد الصفوف التي تطابق الاستعلام (باستثناء LIMIT).

في الاستعلامات مع UNION ، يمكن لـ SQL_CALC_FOUND_ROWS التصرف بطريقتين نظرًا لحقيقة أن LIMIT يمكن أن تظهر في عدة أماكن. يمكن إجراء عد الصف لاستعلامات SELECT الفردية ، أو الاستعلام بالكامل بعد التسلسل.

الغرض من SQL_CALC_FOUND_ROWS لـ UNION هو أنه يجب أن يُرجع عدد الصفوف التي سيتم إرجاعها بدون LIMIT عام. شروط استخدام SQL_CALC_FOUND_ROWS مع UNION هي كما يلي:

  • يجب أن تظهر الكلمة الأساسية SQL_CALC_FOUND_ROWS في عبارة SELECT الأولى.
  • لن يكون FOUND_ROWS () دقيقًا إلا إذا تم استخدام UNION ALL. إذا تم تحديد UNION بدون الكل ، فسيحدث إلغاء المكررة ويكون FOUND_ROWS () تقريبيًا فقط.
  • إذا لم يكن LIMIT موجودًا في UNION ، فسيتم تجاهل SQL_CALC_FOUND_ROWS ويتم إرجاع عدد الصفوف في الجدول المؤقت الذي تم إنشاؤه لتنفيذ UNION.
دعونا نتذكر ما هي الرسائل والموضوعات التي لدينا. للقيام بذلك ، يمكنك استخدام الاستعلام المعتاد:

ولكن ماذا لو أردنا فقط معرفة عدد الرسائل الموجودة في المنتدى. للقيام بذلك ، يمكنك استخدام الوظيفة المضمنة عدد ()... تحسب هذه الوظيفة عدد الصفوف. علاوة على ذلك ، إذا كانت * بمثابة وسيطة لهذه الوظيفة ، فسيتم حساب جميع صفوف الجدول. وإذا تم تحديد اسم عمود كوسيطة ، فسيتم حساب الصفوف التي لها قيمة في العمود المحدد فقط.

في مثالنا ، ستعطي كلتا الوسيطتين نفس النتيجة ، منذ ذلك الحين جميع الأعمدة في الجدول ليست فارغة. لنكتب استعلامًا باستخدام العمود id_topic كوسيطة:

حدد COUNT (id_topic) من المشاركات ؛

لذلك ، هناك 4 مشاركات في مواضيعنا. ولكن ماذا لو أردنا معرفة عدد المشاركات التي يحتويها كل موضوع. للقيام بذلك ، نحتاج إلى تجميع رسائلنا حسب الموضوع وحساب عدد الرسائل لكل مجموعة. للتجميع في SQL ، استخدم عامل التشغيل مجموعة من... سيبدو طلبنا الآن كما يلي:

حدد id_topic ، COUNT (id_topic) من المشاركات GROUP BY id_topic ؛

المشغل أو العامل مجموعة منيخبر نظام إدارة قواعد البيانات (DBMS) بتجميع البيانات حسب عمود id_topic (أي أن كل موضوع يمثل مجموعة منفصلة) ولكل مجموعة أن تحسب عدد الصفوف:

حسنًا ، في الموضوع الذي يحتوي على معرف = 1 لدينا 3 رسائل ، ومع معرف = 4 - واحد. بالمناسبة ، إذا لم تكن هناك قيم في حقل id_topic ، فسيتم دمج هذه الصفوف في مجموعة منفصلة بقيمة NULL.

افترض أننا مهتمون فقط بالمجموعات التي تحتوي على أكثر من رسالتين. في الاستعلام العادي ، نحدد شرطًا باستخدام عامل التشغيل أين، ولكن يمكن لهذا المشغل العمل فقط مع السلاسل ، وبالنسبة للمجموعات ، يتم تنفيذ نفس الوظائف بواسطة المشغل نأخذ:

حدد id_topic، COUNT (id_topic) من التدوينات GROUP BY id_topic HAVING COUNT (id_topic)> 2 ؛

نتيجة لذلك ، لدينا:

في الدرس 4 ، نظرنا في الشروط التي يمكن أن يحددها المشغل أين، يمكن أن يحدد المشغل نفس الشروط نأخذ، عليك فقط أن تتذكر ذلك أينترشيح الخطوط و نأخذ- مجموعات.

لذلك تعلمنا اليوم كيفية إنشاء مجموعات وكيفية حساب عدد الصفوف في جدول وفي مجموعات. بشكل عام ، جنبًا إلى جنب مع عامل التشغيل مجموعة منيمكنك استخدام وظائف مضمنة أخرى ، لكننا سنقوم بدراستها لاحقًا.

لتحديد عدد السجلات في جدول MySQL ، تحتاج إلى استخدام الوظيفة الخاصة COUNT ().

ترجع الدالة COUNT () عدد السجلات الموجودة في جدول والتي تطابق معيارًا معينًا.

تحسب الدالة COUNT (expr) دائمًا تلك الصفوف فقط حيث يتم تقييم expr إلى NOT NULL.

استثناء لهذه القاعدة هو استخدام الدالة COUNT () مع علامة النجمة كوسيطة - COUNT (*). في هذه الحالة ، يتم النظر في جميع الصفوف ، بغض النظر عما إذا كانت NULL أو NOT NULL.

على سبيل المثال ، ترجع الدالة COUNT (*) العدد الإجمالي للسجلات في جدول:

حدد عددًا (*) من table_name

كيفية حساب عدد الإدخالات وعرضها

مثال على كود PHP + MySQL لحساب وعرض العدد الإجمالي للصفوف:

$ res = mysql_query ("SELECT COUNT (*) FROM table_name") $ row = mysql_fetch_row ($ res)؛ إجمالي $ = $ row؛ // إجمالي السجلات echo $ total؛ ؟>

يوضح هذا المثال أبسط استخدام للدالة COUNT (). ولكن مع هذه الوظيفة ، يمكنك أداء مهام أخرى أيضًا.

بتحديد عمود معين في جدول كمعلمة ، ترجع الدالة COUNT (اسم_العمود) عدد السجلات في هذا العمود التي لا تحتوي على NULL. يتم تجاهل الإدخالات الفارغة.

حدد COUNT (اسم_عمود) من اسم_الجدول

لا يمكنك استخدام دالة mysql_num_rows () ، لأنه من أجل معرفة العدد الإجمالي للسجلات ، تحتاج إلى تنفيذ استعلام SELECT * FROM db ، أي الحصول على جميع السجلات ، وهو أمر غير مرغوب فيه ، لذلك يفضل استخدم وظيفة العد.

نتيجة $ = mysql_query ("SELECT COUNT (*) كـ rec FROM db") ؛

استخدام دالة COUNT () بالقدوة

فيما يلي مثال آخر على استخدام الدالة COUNT (). لنفترض أن لديك جدول ice_cream به كتالوج آيس كريم يحتوي على معرّفات الفئات وأسماء الآيس كريم.

بمجرد أن واجهت هذه المشكلة ، لكن العديد من الحلول المقدمة على الإنترنت لم تنجح معي. ومع ذلك وجدت طريقة للخروج. ولا حتى واحدة.

الطريقة 1.phpMyAdmin

لنبدأ بالأبسط والأكثر وضوحًا. لنفترض أنك لست بحاجة إلى استخدام النتيجة في الكود ، ولكن فقط اكتشف عدد الأسطر ، هذا كل شيء.

ثم انتقل إلى phpMyAdmin (localhost / tools / phpmyadmin - for Denver) ، ثم حدد قاعدة البيانات المطلوبة ، ثم حدد الجدول ، وعدد الصفوف التي تريد اكتشافها ، ونرى الرسالة التالية:

الطريقة 2. العد

هذه هي الطريقة التي يبدو بها استعلام SQL نفسه:

استعلام SQL بشرط:

تنفيذ PHP:

وبالمثل ، يمكنك إضافة شرط هنا. ثم سيعرض الرمز عدد الصفوف في الجدول التي تفي بالشرط.

الطريقة الثالثة: msql_num_rows

على سبيل المثال ، في WordPress ، يتم تخزين المنشورات في جدول wp_posts ، حتى نتمكن من معرفة عدد المنشورات (المنشورات) المخزنة في قاعدة البيانات (في جدول MySQL). يتم إعطاء هذا الرمز على سبيل المثال فقط (أو في الحالات التي لا يتم فيها تحميل بيئة WordPress) ، لأنه في WordPress يتم الاتصال بقاعدة البيانات من خلال الفصل الدراسي.

ستشمل النتيجة تمامًا جميع السجلات. وكيف يمكن معرفة عدد ما يتم نشره فقط؟ للقيام بذلك ، نحتاج إلى تغيير استعلام SQL بشكل طفيف.