النتائج 1 إلى 11 من 11

الموضوع: مشكلة: اختيار سجلات من قاعدة البيانات

  1. #1
    عضو فعال
    تاريخ التسجيل
    Apr 2001
    المشاركات
    1,613

    مشكلة: اختيار سجلات من قاعدة البيانات



    السلام عليكم ورحمة الله وبركاته

    لدي جدول يحتوي على بعض البيانات ولنفترض أنها أسماء مشتركين.

    عند التسجيل يتم إدخال قيمة معينة تدل مثلاً على أن المشترك مشرف مثلاً وقد لا يتم إدخال هذه القيمة (0 و 1).

    أحتاج لعرض آخر البيانات من الجدول ولكن بالشكل التالي ..
    أولاً آخر مشرف (تبعاً لتاريخ التسجيل أو رقم العضوية لا يهم الأمر كثيراً) (لديه القيمة 1).
    ثانياً آخر 4 مشرفين بعد المشرف الأول (لديهم القيمة 1).
    ثالثاً آخر 10 مشتركين تشمل الأعضاء العاديين والمشرفين (لديهم القيم 1 و 0) لكن بشرط أن لا يتكرر أحد الخمسة الأوائل (آخر 5 لديهم القيمة 1 لا يتم عرضهم ضمن ال10).

    الحالة الأولى سهلة وهي استعلام بتحديد limit=1 و القيمة المحددة = 1.
    الحالة الثانية يجب أن أختار من لديه القيمة =1 ولكن يجب أن لا يكون قد أختير في الحالة الأولى .. كيف؟، لو جربنا limit=5 ستخرج لنا القائمة المطلوبة بزيادة الاسم المعروض في الحالة 1 وهذا خطأ.
    الحالة الثالثة لو عولجت الحالة الثانية فأمر هذه سهل، وهي اختيار آخر 10 بغض النظر عن القيمة، ولكن يجب أن لا يكونوا ضمن أسماء الحالتين 1 و 2.

    هل من اقتراحات؟





    __________________
    منشور نت .. الصورة بالألوان الكاملة
    لطلب الإعلان: webmaster[at]manshor.net
    : 00218913170099


  2. #2
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    الحالة الثانية يجب أن أختار من لديه القيمة =1 ولكن يجب أن لا يكون قد أختير في الحالة الأولى .. كيف؟، لو جربنا limit=5 ستخرج لنا القائمة المطلوبة بزيادة الاسم المعروض في الحالة 1 وهذا خطأ.
    جرب LIMIT 1, 4





    __________________
    مدونتي

  3. #3
    عضو فعال
    تاريخ التسجيل
    Apr 2001
    المشاركات
    1,613


    هل هذا الأمر سيجعله يختار ما 4 سجلات بعد الأول؟





    __________________
    منشور نت .. الصورة بالألوان الكاملة
    لطلب الإعلان: webmaster[at]manshor.net
    : 00218913170099

  4. #4
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    بالضبط..





    __________________
    مدونتي

  5. #5
    عضو فعال
    تاريخ التسجيل
    Apr 2001
    المشاركات
    1,613


    تسلم أخي محمود، راجعت الmysql manual البارحة ووجدت أن القيمة الأولى تسمى بالOffset .

    ولكن الآن ماذا عن الخيار الثالث، هل هناك طريقة لاستجلاب السجلات العشر الأخيرة باستثناء السجلات التي عرضت في الخيارين 1 و 2؟





    __________________
    منشور نت .. الصورة بالألوان الكاملة
    لطلب الإعلان: webmaster[at]manshor.net
    : 00218913170099

  6. #6
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    يعني عرض آخر 10 بعد الـ 5 الأوائل

    تصبح بهذه الطريقة:
    LIMIT 5, 10





    __________________
    مدونتي

  7. #7
    عضو فعال
    تاريخ التسجيل
    Apr 2001
    المشاركات
    1,613


    عفواً أخي محمود ليس هذا المطلوب.

    المطلوب كما شرحت في بداية الموضوع

    آخر عشرة سجلات بشرط أن لا تكون قد أختيرت في الخيارين الأول والثاني.

    للتوضيح أكثر ..

    لدي هذه المجموعة من الأعضاء

    1 -->0 5-->1 9-->0 13-->0
    2 -->0 6-->0 10->1 14 -->1
    3--> 1 7-->1 11->1 15-->1
    4-->0 8-->0 12->0 16-->0

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

    وبالتالي ..
    الفقرة الأولى .. سيكون الاختيار للعضو رقم 15
    الفقرة الثانية .. سيكون الاختيار للأعضاء (14 - 11 - 10 - 7) بينما الأعضاء (5 و 3) لا يتم اختيارهم لأن هناك من سجل بعدهم وتحقق فيهم الشرط ونحن حددنا الخيار لآخر 4 يسبقون الأخير في التسجيل.
    الفقرة الثالثة .. يتم فيها عرض آخر 10، لكن يجب أن لا يكونوا ضمن الذين وقع عليهم الاختيار في الفقرتين 1 و 2.
    وتكون النتيجة على النحو التالي ..
    (16 - 13 - 12 - 9 - 8 - 6 - 5 - 4 - 3 - 2) والملاحظ هنا أن العضوين 5 و 3 اختيرا لأننا هنا لا نشترط أن تكون العلامة الدالة =1 بل يمكن أن تكون 1 أو 0، المهم أن لا يكون قد أختير سابقاً.

    شكراً لمساعدتك أخي محمود ولكل من سيحاول أن يساعدني .





    __________________
    منشور نت .. الصورة بالألوان الكاملة
    لطلب الإعلان: webmaster[at]manshor.net
    : 00218913170099

  8. #8
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    في هذه الحالة يجب تخزين ارقام الاعضاء الذين تم اختيارهم في الخطوات 1 و 2 في مصفوفة

    ثم عمل implode للمصفوفة بالحرف "،" ليكونوا على الشكل مثلاً: 1،2،3،4،5 وهكذا

    فيصبح لدينا string وليكن اسمه $selected فيه ارقام الاشخاص اللي تم اختيارهم في الخطوتين السابقتين مفصول بينهم بالفاصلة "،"

    ثم تضيف الشرط التالي في الاستعلام الثالث:
    كود PHP:
    WHERE id NOT IN ($selected






    __________________
    مدونتي

  9. #9
    عضو فعال
    تاريخ التسجيل
    Apr 2001
    المشاركات
    1,613


    شكراً لك أخي محمود، هل ممكن أن تضع لي مثالاً عن عملية الإمبلود هذه؟





    __________________
    منشور نت .. الصورة بالألوان الكاملة
    لطلب الإعلان: webmaster[at]manshor.net
    : 00218913170099

  10. #10
    عضو فعال جدا
    تاريخ التسجيل
    Apr 2002
    المشاركات
    2,046


    اليك هذا المثال أخي

    بفرض وجود المصفوفة $users فيها أرقام المشرفين الذين تم اختيارهم في الاستعلامين 1 و 2

    تستخدم الكود التالي:
    كود PHP:
    // استخراج قيم المصفوفة في نص والفصل بينها بالفاصلة
    $selected implode(","$users);
    $query = @mysql_query("SELECT * FROM `users` WHERE `id` NOT IN ($selected) LIMIT 10 ORDER BY `id`"); 
    أتمنى تكون وضحت لك الصورة

    تحياتي لك





    __________________
    مدونتي

  11. #11
    عضو فعال
    تاريخ التسجيل
    Apr 2001
    المشاركات
    1,613


    شكراً جزيلاً لك.

    وجعلها الله في ميزان حسناتك إن شاء الله.





    __________________
    منشور نت .. الصورة بالألوان الكاملة
    لطلب الإعلان: webmaster[at]manshor.net
    : 00218913170099





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض