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

الموضوع: أستعلام فى mysql حيرنى

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    281

    أستعلام فى mysql حيرنى



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

    أستعلام حيرنى جربت كل الطرق ولم اصل لنتيجة

    يوجد جدولين

    جدول الاعضاء
    كود PHP:
    table `members`
     - `
    member_id`
     - `
    username
    #########

    جدول الاخبار
    كود PHP:
    table `news`
     - `
    news_id`
     - `
    member_id`
     - `
    title`
     - `
    details
    اريد أظهار احدث 5 اخبار اعتمادآ على حقل news_id مع عدم تكرار member_id فى حال ان العضو member_id ضاف 5 اخبار مثلآ الهدف هو اظهار احدث خبر قام بأضافتة كل عضو قمت بكتابة هذا الاستعلام
    كود PHP:
    select
        
    `n`.`news_id`,
        `
    n`.`title`,
        `
    n`.`details`,
        `
    m`.`member_id`,
        `
    m`.`username`,

    from
        
    `news` `n`,
        `
    members` `m`
    where
        
    `m`.`member_id` = `n`.`member_id`

        
    GROUP BY `n`.`member_id`
        
    ORDER BY `n`.`news_idDESC LIMIT 5 
    لاكن الترتيب بواسطة DESC لايعمل بل يقوم بجلب اول خبر لكل عضو وانا اريد اخر خبر (احدث خبر), جربت كتابة استعلام بطرق مختلفة ووصلت لنفس النتيجة





    التعديل الأخير تم بواسطة tech ; 02-04-2012 الساعة 11:56 AM


  2. #2


    تفضل اخى الكريم

    كود PHP:

    SELECT 
    FROM news 
                       INNER JOIN members ON news
    .member_id members.member_id
    GROUP BY news
    .member_id
    ORDER BY news
    .news_id DESC 
    طبعا بامكانك تعديل الاستعلام لجلب الحقول المطلوبة فقط بدلا من جلب الكل






  3. #3
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    281


    المشكلة اخى العزيز هى فى الترتيب لو جربت هذا الأستعلام او الاستعلام الذى وضعتوا ستجد ان الترتيب بواسطة DESC | ASC غير فعال وهذة هى المشكلة التى تواجهنى






  4. #4


    اخى الكريم من الواضح ان الاستعلام يعمل معى جيدا
    هل من الممكن ان تضع لنا نسخة من الجدولين الموجودين لديك حتى نرى ما المشكلة !






  5. #5
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    281


    تفضل هذا مثال على الجدول

    كود PHP:
    --
    -- 
    بنية الجدول `members`
    --

    CREATE TABLE IF NOT EXISTS `members` (
      `
    member_idint(255NOT NULL AUTO_INCREMENT,
      `
    usernamevarchar(25NOT NULL,
      
    PRIMARY KEY (`member_id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=;

    --
    -- 
    إرجاع أو استيراد بيانات الجدول `members`
    --

    INSERT INTO `members` (`member_id`, `username`) VALUES
    (1'ahmed'),
    (
    2'mohamed'),
    (
    3'mahmoud'),
    (
    4'ali'),
    (
    5'mustafa');

    -- --------------------------------------------------------

    --
    -- 
    بنية الجدول `news`
    --

    CREATE TABLE IF NOT EXISTS `news` (
      `
    news_idint(255NOT NULL AUTO_INCREMENT,
      `
    member_idint(255NOT NULL,
      `
    titlevarchar(255NOT NULL,
      `
    detailstext NOT NULL,
      
    PRIMARY KEY (`news_id`)
    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

    --
    -- 
    إرجاع أو استيراد بيانات الجدول `news`
    --

    INSERT INTO `news` (`news_id`, `member_id`, `title`, `details`) VALUES
    (135'title 5-a''details 5-a'),
    (
    124'title 4-c''details 4-c'),
    (
    114'details  4-b''details 4-b'),
    (
    104'title 4-a''details 4-a'),
    (
    93'title 3-c''details 3-c'),
    (
    83'details  3-b''details 3-b'),
    (
    73'title 3-a''details 3-a'),
    (
    62'title 2-c''details 2-c'),
    (
    52'details  2-b''details 2-b'),
    (
    42'title 2-a''details 2-a'),
    (
    31'title c''details 1-c'),
    (
    21'details  b''details 1-b'),
    (
    11'title a''details 1-a'),
    (
    145'details  5-b''details 5-b'),
    (
    155'title 5-c''details 5-c'); 
    والمفروض بعد تنفيذ هذا الأستعلام على قاعدة البيانات هذة
    كود PHP:
    select
        
    `n`.`news_id`,
        `
    n`.`title`,
        `
    n`.`details`,
        `
    m`.`member_id`,
        `
    m`.`username`
    from
        
    `news` `n`,
        `
    members` `m`
    where
        
    `m`.`member_id` = `n`.`member_id`

        
    GROUP BY `n`.`member_id`
        
    ORDER BY `n`.`news_idDESC LIMIT 5 
    والمفروض تكون النتائج كاتالى

    كود PHP:
    news_id    title      details      member_id    username
    ------------------------------------------------------------------
    15    title 5-c     details 5-c     5         mustafa 
    ------------------------------------------------------------------
    12    title 4-c     details 4-c     4         ali 
    ------------------------------------------------------------------
    9    title 3-c     details 3-c     3         mahmoud 
    ------------------------------------------------------------------
    6    title 2-c     details 2-c     2         mohamed 
    ------------------------------------------------------------------
    3    title c     details 1-c     1         ahmed 
    بحيث يظهر اخر خبر لكل عضو بناءآ على حقل `news_id` بواسطة desc

    لاكنها تظهر بترتيب اخر





    التعديل الأخير تم بواسطة tech ; 02-04-2012 الساعة 03:50 PM

  6. #6


    الان فهمت المقصود اخى الكريم واليك الحل

    كود PHP:
    SELECT FROM (SELECT FROM news ORDER BY news_id DESCt1
                       INNER JOIN members ON t1
    .member_id members.member_id
    GROUP BY t1
    .member_id
    ORDER BY t1
    .news_id DESC 
    ولكن كما ترى يوجد بها nested query وهذا غير محبذ خاصة مع البيانات الكبيرة !

    يمكنك القراءة أكثر من هنا
    http://kristiannielsen.livejournal.com/6745.html

    ولا تنسانى من صالح دعائك






  7. #7
    عضو نشيط
    تاريخ التسجيل
    Apr 2004
    المشاركات
    46


    أخي يمكنك استخدام الاستعلام التالي وهو لا يحتوي على nested query


    كود:
    SELECT n1.*, username
    FROM news n1 LEFT JOIN news n2
     ON (n1.member_id = n2.member_id AND n1.news_id < n2.news_id)
     left join members on `members`.member_id=n1.member_id
    WHERE n2.news_id IS NULL order by news_id DESC;






    __________________
    لا أعلم ما هي أسلحة الحرب العالمية الثالثة.. ولكنني أعلم أن أسلحة الحرب العالمية الرابعة ستكون العصي والحجارة!

  8. #8
    عضو نشيط
    تاريخ التسجيل
    Feb 2008
    المشاركات
    281


    اخى سامى شكرآ جزيلآ لك هذا الاستعلام يعمل لاكن بيكون بطىء مع السجلات الكثيرة جربتوا على 190 الف سجل وتم تنفيزوا فى زمن (استغرق الاستعلام 7.2019 ثانية) لاكن لامشكلة لان تنفيذ الاستعلام بيتم كل 5 دقائق

    بالنسة لهذا الموضوع http://www.swalif.net/softs/swalif45/softs308961/ انا متابع له وفى انتظار المزيد من مشاركاتك الثرية بالمعلومات

    مشكور jalal_omary






  9. #9


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

    وجزى الله أخى الكريم jalal_omary خيرا على ادلاءه بدلوه فى هذا الموضوع

    ولكن كما تلاحظون فمجتمع سوالف لم يعد كسابق عهده من التفاعل ربما لأنه بحاجة الى اعادة النظر فى برمجيات الحوار (مثل المنتدى هذا ) وتحويلها الى شىء اخر لا أعلم ربما مدونة أوربما نموذج مشابه ل stackoverfllow حتى تعظم الفائدة
    ففى سؤالك هذا اجابة للكثير ممن سيواجه هذه المشكلة بعد ذلك ولكن المشكلة أنه سيطرح المشكلة من جديد وسيبذل فيها جهد جديد على الرغم من أنها موجودة على صفحات المنتدى وربما بشكل أفضل ولكن كما تقول جوجل دائما المنتديات العربية حى ساحة من المخلفات
    من سرقة وتكرار المحتوى !!






  10. #10
    عضو نشيط
    تاريخ التسجيل
    Aug 2007
    المشاركات
    72


    شكرآ جزيلآ لكم










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

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

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