سعيد يوسف نشر 10 أكتوبر 2021 أرسل تقرير نشر 10 أكتوبر 2021 أريد عرض X معلومة من قاعدة البيانات في كل صفحة فكيف أستطيع التحكم بالجزء المطلوب وجلبه، أي تطبيق مبدأ skip / take 1 اقتباس
1 Wael Aljamal نشر 10 أكتوبر 2021 أرسل تقرير نشر 10 أكتوبر 2021 يوجد عدة طرق لتحقيق المطلوب وهذا يعتمد على نوع مخدم قاعدة البيانات وما يدعمه. في SQL Server يوجد الكلمتين المفتاحيتين: OFFSET وتعني تطبيق إزاحة skip وتجاهل عدد من السجلات (نبدأ جلب السجلات التي رقمها من بعد قيمتها) FETCH NEXT تفيد في تحديد عدد الأسطر التالية المطلوبة SELECT col1, col2, -- تحديد الأعمدة FROM ... -- تحديد الجدول WHERE ... -- كتابة شرط الفلترة ORDER BY -- يفضل وبشكل ضروري ترتيب البيانات حسب حقل معين ليتم جلبهم بطريقة صحيحة -- الجزء التالي يحدد الإزاحة وعدد السجلات الذي سيعيده الاستعلام OFFSET 10 ROWS -- تخطي عشر سجلات 10 rows FETCH NEXT 10 ROWS ONLY; -- جلب العشر سجلات التالية 10 rows يمكن تعريف متغيرات وتمرير قيمة لها ثم استخدامها في الاستعلام DECLARE @Skip TINYINT = 10 , @Fetch TINYINT = 10; كما يمكن تطبيقها بواسطة ROW_NUMBER التي تعيد رقم السطر ضمن النتيجة وبهذا نقوم بفلترة النتائج select * -- جلب أعمدة from ( select *, ROW_NUMBER() OVER (ORDER BY columnid) AS ROW_NUM -- جلب ترقيم النتائج بترتيب حسب المعرف from table_name ) table_x WHERE -- تحديد شرط الفلترة RowNum >= 10 AND RowNum <= 20 ORDER BY RowNum -- إعادة ترتريب حسب رقم السطر وفي MySQL يمكن استخدام LIMIT + OFFSET LIMIT + OFFSET => SELECT column FROM table LIMIT 10 OFFSET 10 LIMIT 2 params => SELECT * FROM table LIMIT 10, 50 -- النتيجة هي الأسطر 11-60 skip 10, take 50 تجاهل أول 10 أسطر وجلب 50 سطر التالي لجلب كل القيم بعد النتيجة 10، نضع الوسيط الثاني قيمة كبيرة جدا SELECT * FROM tbl LIMIT 10,18446744073709551615; وباستخدام المتغيرات SET @skip=1; SET @numrows=5; PREPARE STMT FROM 'SELECT * FROM tbl LIMIT ?, ?'; EXECUTE STMT USING @skip, @numrows; 1 اقتباس
1 Hassan Hedr نشر 11 أكتوبر 2021 أرسل تقرير نشر 11 أكتوبر 2021 بفرض لدينا جدول المستخدمين users التالي: +----+-------+ | Id | Name | +----+-------+ | 1 | أحمد | | 2 | عبدالله | | 3 | يوسف | | 4 | جمال | | 5 | محمد | | 6 | سعيد | +----+-------+ ونريد تصفح النتائج على صفحات كل صفحة فيها ثلاث أسطر، سيكون الجدول السابق عبارة عن صفحتين كل منها تحتوي ثلاث نتائج بالشكل التالي: # الصفحة الأولى +----+-------+ | Id | Name | +----+-------+ | 1 | أحمد | | 2 | عبدالله | | 3 | يوسف | +----+-------+ # الصفحة الثانية +----+-------+ | Id | Name | +----+-------+ | 4 | جمال | | 5 | محمد | | 6 | سعيد | +----+-------+ MYSQL نستخدم الكلمتين: LIMIT لتحديد عدد النتائج في الصفحة الواحدة (3 في حالتنا) OFFSET لتحديد رقم الصفحة يمكن تجاهلها للصفحة الأولى (1 أو 2 في حالتنا) تكون الاستعلامات كالتالي: # الصفحة الأولى SELECT * FROM users LIMIT 3 OFFSET 1; # أو SELECT * FROM users LIMIT 3; # الصفحة الثانية SELECT * FROM users LIMIT 3 OFFSET 2; SQL Server نستخدم الجملتين FETCH NEXT x ROWS ONLY لتحديد عدد النتائج في الصفحة الواحدة حيث x هو عدد النتائج (3 في حالتنا) OFFSET x ROWS لتحديد بداية الصفحة، حيث x يشير إلى ترتيب أول نتيجة نريدها في الصفحة، يمكن حسابها بدليل الصفحة كالتالي (حجم الصفحة × (رقم الصفحة - 1))، يمكن تجاهلها لأول صفحة (0 و 3 في حالتنا) تكون الاستعلامات كالتالي: # الصفحة الأولى SELECT * FROM users OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY; # أو SELECT * FROM users NEXT 3 ROWS ONLY; # الصفحة الثانية SELECT * FROM users OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY; 1 اقتباس
السؤال
سعيد يوسف
أريد عرض X معلومة من قاعدة البيانات في كل صفحة فكيف أستطيع التحكم بالجزء المطلوب وجلبه، أي تطبيق مبدأ skip / take
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.