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

الموضوع: لخبراء Mysql متقدم

  1. #1
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947

    لخبراء Mysql متقدم



    السلام عليكم
    لدي جدولين احدهما للمقالاات والاخر لاقسام المقالاات
    articles ,articles_cat

    المقالاات يحتوي على:
    id
    title
    visits
    active
    cat_id

    و الاقسام يحتوي على
    catname
    cat_id

    اريد اظهار مجموع المقالات لكل قسم و مجموع المقالاات المفعلة والمقالاات الغير مفعلة في استعلام واحد

    قمت باظهار عدد المقالات عن طريق left join

    الاستعلام كالتالي:

    كود PHP:
    $sql "select articles.id as `article_id`,articles.title as `article_title`,articles_cat.active as `active`,COUNT(articles.id) as `articles_num`,count(IF(articles.active=0,article.active,0)) as `active_num`,IF(article.active=1,COUNT(article.active),0) as `nonactive_num`,sum(articles.visits) as `visit_num`
    from `articles_cat` join`articles` as `articles`using (cat_id) group by`catid` asc " 
    المشكلة الآن في الجزء:
    كود PHP:
    count(IF(articles.active=0,article.active,0)) as `active_num
    وايضا في الجزء:
    كود PHP:
    IF(article.active=0,COUNT(article.active),0) as `nonactive_num
    حاولت عمل شرط بحيث يحسب عدد الفعال وينسبه الى active_num لكن المشكلة اريد ان اضع الشرط قبل كتابة from حتى يحسب الفعال والغير فعال كل على حدة
    للتوضيح اريد عمله هكذا مع العلم انه خاطئ لكن للتوضيح فقط:

    كود PHP:
    count(articles.active where articles.active=1) as `active_num`,count(articles.active where articles.active=0) as `notactive_num
    حاولت ايضاً عمل استعلامات متداخلة وفشلت ولا ترجع اي نتيجة
    عملت استعلام كالتالي:
    كود PHP:
    left join (SELECT count(active),active,id from articles having active=1 group by id) as `num_activeon(articles.cat_id=articles_cat.cat_id
    فهل من حل لجمع المفعل والغير مفعل كل على حدة في استعلام واحد فقط؟





    التعديل الأخير تم بواسطة مهندس مصرى ; 07-11-2008 الساعة 11:31 AM
    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير


  2. #2
    عضو فعال
    تاريخ التسجيل
    Jul 2003
    المشاركات
    1,576


    active دي ليها قيمة من اثنين مثلا ( 0 = غير مفعل ، 1 = مفعل )

    وانت عايز تجيب مجموع المقالات المفعلة والغير المفعلة في كل الاقسام


    هناك طريقة بسيطة جدا لو كان معاك المجموع الكلي للمقالات ، بحيث انك تجيب عدد المقالات المفعلة وتطرحه من العدد الكلي يطلعلك الغير مفعلة


    المشكلة كما ذكرت تكمن في الاستعلام الواحد هو ان Count تعتبر من ال agreggation functions والتي لا يتم استخدامها الا individually في الكويري ..

    ولكن اعتقد ببعض من " الشقلبة " ممكن توصل لكويري واحد باستخدام group by ولكن سيتم جلب نتائج عادية وتقوم انت باحصاء عدد النتائج من خلال count





    __________________
    SWF Thumbnail - tweet me

  3. #3
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    active دي ليها قيمة من اثنين مثلا ( 0 = غير مفعل ، 1 = مفعل )

    وانت عايز تجيب مجموع المقالات المفعلة والغير المفعلة في كل الاقسام


    هناك طريقة بسيطة جدا لو كان معاك المجموع الكلي للمقالات ، بحيث انك تجيب عدد المقالات المفعلة وتطرحه من العدد الكلي يطلعلك الغير مفعلة


    المشكلة كما ذكرت تكمن في الاستعلام الواحد هو ان Count تعتبر من ال agreggation functions والتي لا يتم استخدامها الا individually في الكويري ..

    ولكن اعتقد ببعض من " الشقلبة " ممكن توصل لكويري واحد باستخدام group by ولكن سيتم جلب نتائج عادية وتقوم انت باحصاء عدد النتائج من خلال count
    أخي الكريم
    شكرا لمساعدتك
    المشكلة من الاصل في معرفة عدد المقالات المفعلة مثلا او غير المفعلة
    لان هناك where واحدة فقط في الاستعلام او having واحدة وبالتالي لن تستطيع وضع شرطين متعارضين مثل ان تضع الشرط على كل المقالات وعلى المقالات المفعلة فقط
    واعتقد لا يمكن حلها الا اذا وضعت الشرط في ال count نفسها بحيث يحسب المفعل فقط او غير المفعل فقط
    لكن بحثت عن اداة لعمل ذلك ولم اجد
    فننتظر افكاركم واقتراحاتكم خصوصاً ان الاستعلام معقد اكثر من ذلك لانه يجلب من 4 جداول لكن انا وضعت الجزء الذي به مشكلة
    هل يمكن عمل union مثلا في الاستعلام؟ ننتظر الافكار ...





    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  4. #4
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


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

    كان نفسي اساعد بس معرفتي بسيطة فية

    كود PHP:

    $sql
    =mysql_query("select*from cats where active=('0' and'1')")
    echo 
    $num=mysql_num_rows($sql); 






    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  5. #5
    عضو فعال
    تاريخ التسجيل
    Jul 2008
    المشاركات
    1,109


    اخي انا عملت الداله ديه بس معرفش صح ام خطاء
    يارب تشتغل معاك

    كود PHP:

    function num_active($table,$activefiald,$cat_id,$cat_idart,$number){
    $sql=mysql_query("select*from $table where $cat_id='$cat_idart'
    and 
    $activefiald ='$number'")
    echo 
    $num=mysql_num_rows($sql);
    if(
    $num[$activefiald ]==1){
        echo 
    $num."مفعل";
    }


    if(
    $num[$activefiald ]==0){
        echo 
    $num."غير مفعل";
    }
    }
    ?> 
    والله يا اخي انا مش عارف اسعدك اذي انت كنت بتساعدني علي طوال سامحني عشان مش عارف اساعد





    التعديل الأخير تم بواسطة محمدهلال ; 07-11-2008 الساعة 09:56 PM
    __________________
    ســـــــبحان الله وبـــــــــحمده *سبـــــــــــحان الله العظيم
    لطلب البرمجة فقط
    helal-egypt@hotmail.com

  6. #6
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    اخي انا عملت الداله ديه بس معرفش صح ام خطاء
    يارب تشتغل معاك

    كود PHP:
     
    function num_active($table,$activefiald,$cat_id,$cat_idart,$number){
    $sql=mysql_query("select*from $table where $cat_id='$cat_idart'
    and 
    $activefiald ='$number'")
    echo 
    $num=mysql_num_rows($sql);
    if(
    $num[$activefiald ]==1){
        echo 
    $num."مفعل";
    }
     
     
    if(
    $num[$activefiald ]==0){
        echo 
    $num."غير مفعل";
    }
    }
    ?> 
    والله يا اخي انا مش عارف اسعدك اذي انت كنت بتساعدني علي طوال سامحني عشان مش عارف اساعد
    شكرا لك اخ محمد
    هذه الطريقة اعلمها لكن اريد في استعلام واحد
    الاستعلام معقد نوعا ما لانه يجلب من 4 جداول في نفس الوقت بالاعتماد على joins و mysql if
    و الاستعلامات المتداخلة





    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  7. #7
    عضو فعال
    تاريخ التسجيل
    Jul 2003
    المشاركات
    1,576


    طيب انا عندي فكرة !!

    دلوقتي المقال لابد يكون مفعل او غير مفعل .. ( يعني مافيش حالة ثالثة ) هم حالتين بس !

    0 او 1

    كود PHP:
    mysql_query("select article.*, cat.catname from article, cat"); 
    كده هيكون معاك كل المقالا المفعلة وغير المفعلة ..

    ومن خلال ال PHP يمكنك تقسيمهم مثلا إلى 2 اراي
    كود PHP:
    if ($row['active']){
    $act_makalat[] = $row;
    $act++;
    }else{
    $nact_makalat[] = $row;
    $nact++;

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

    ويمكنك ايضا تحديد قسم معين في الكويري بدون مشاكل

    مش عارف ايه مشكلة الطريقة دي بالنسبة لك ؟

    كويري واحد .. ولذيذة وسريعة وتعامل php مع المصفوفات مذهل ! وسريع ..
    طيب ما تعمل كده مثلا :





    __________________
    SWF Thumbnail - tweet me

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    طيب انا عندي فكرة !!

    دلوقتي المقال لابد يكون مفعل او غير مفعل .. ( يعني مافيش حالة ثالثة ) هم حالتين بس !

    0 او 1

    كود PHP:
    mysql_query("select article.*, cat.catname from article, cat"); 
    كده هيكون معاك كل المقالا المفعلة وغير المفعلة ..

    ومن خلال ال PHP يمكنك تقسيمهم مثلا إلى 2 اراي
    كود PHP:
    if ($row['active']){
    $act_makalat[] = $row;
    $act++;
    }else{
    $nact_makalat[] = $row;
    $nact++;

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

    ويمكنك ايضا تحديد قسم معين في الكويري بدون مشاكل

    مش عارف ايه مشكلة الطريقة دي بالنسبة لك ؟

    كويري واحد .. ولذيذة وسريعة وتعامل php مع المصفوفات مذهل ! وسريع ..
    طيب ما تعمل كده مثلا :
    صحيح , يمكن عملها بالطريقة التالية وهي التي استخدمها حالياً لكن طلبي ان يكون في جملة ال sql نفسها
    بحيث لا احتاج للاعتماد على ال php في شىء
    المشكلة في كيفية وضع شرطين متعارضين لاستعلام واحد
    تعديل
    بالمناسبة هذه الطريقة لا تصلح في حالة عدم عرض الجدول مباشرة
    اي مثلا اذا اردت حصر عدد المقالات في قسم معين
    فان ال loop تعمل على عدد الاقسام وليس عدد المقالات وبالتالي سيحصر عدد الاقسام وليس عدد المقالات بداخل الاقسام





    التعديل الأخير تم بواسطة مهندس مصرى ; 09-11-2008 الساعة 09:06 PM
    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  9. #9
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    شكراً لكل من ساعد او حاول المساعدة
    وجدت الحل في موقع اجنبي بعد عناء البحث
    كود PHP:
    select *,count (case when condition1 then 1 end 






    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير

  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    May 2006
    المشاركات
    477


    سلام عليكم

    تستطيع فعلها باستخدام Left Join بس تحتاج بعض التركيز لأنها طويله شوي
    عامة انا كتبت لك الأمر بشكل سريع .. راجعه مع مراجعة أسماء الجداول
    كود:
    SELECT t1.c1 AS total,t2.c2 AS totalon,t3.c3 AS totaloff FROM cats LEFT JOIN ( SELECT cats_id,COUNT(*) AS c1 FROM articles GROUP BY id) AS t1 ON t1.cats_id=cats.id LEFT JOIN (SELECT cats_id,active,COUNT(*) AS c2 FROM articles WHERE active=1 GROUP BY id) AS t2 ON t2.cats_id=cats.id LEFT JOIN (SELECT cats_id,active,COUNT(*) AS c3 FROM articles WHERE active=0 GROUP BY id) AS t3 ON t3.cats_id=cats.id






    __________________
    أحمد عبد الفتاح
    www.servmix.com
    لمراسلتي : admin@servmix.com


  11. #11
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    947


    سلام عليكم

    تستطيع فعلها باستخدام Left Join بس تحتاج بعض التركيز لأنها طويله شوي
    عامة انا كتبت لك الأمر بشكل سريع .. راجعه مع مراجعة أسماء الجداول
    كود:
    SELECT t1.c1 AS total,t2.c2 AS totalon,t3.c3 AS totaloff FROM cats LEFT JOIN ( SELECT cats_id,COUNT(*) AS c1 FROM articles GROUP BY id) AS t1 ON t1.cats_id=cats.id LEFT JOIN (SELECT cats_id,active,COUNT(*) AS c2 FROM articles WHERE active=1 GROUP BY id) AS t2 ON t2.cats_id=cats.id LEFT JOIN (SELECT cats_id,active,COUNT(*) AS c3 FROM articles WHERE active=0 GROUP BY id) AS t3 ON t3.cats_id=cats.id
    أخي الكريم
    انا جربت عمل حل left join من قبل كتابة الموضوع ولم تزبط
    هو منطقيا المفترض أن يكون صحيحا لكن انا كنت طبقته كما كتبت تماماً قبل كتابة هذا الموضوع و لم يعطي لي اي نتيجة





    __________________
    قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير





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

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

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