صفحة 1 من 9 123456 ... الأخيرةالأخيرة
النتائج 1 إلى 15 من 134

الموضوع: ألغاز برمجية

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

    ألغاز برمجية



    السلام عليكم ، حياكم الله

    هذا الموضوع مخصص لطرح اي مشكلة سواء في الداتابيس توليد الارقام المشاكل المنطقية الخ
    اهم شئ لغز ينشط التفكير وممتع ..

    سأبدا انا بمشكلة في الMySQL

    لديك هذه الجداول :
    كود:
    CREATE TABLE `project` (`id` INT AUTO_INCREMENT, `name` VARCHAR (50), PRIMARY KEY(`id`));
    
    CREATE TABLE `item` (`id` INT (11) AUTO_INCREMENT, `project_id` INT (11), `name` VARCHAR (50), PRIMARY KEY(`id`));
    
    CREATE TABLE `comment` (`id` INT (11) AUTO_INCREMENT, `item_id` INT (11), `data` VARCHAR (50), PRIMARY KEY(`id`));
    المدخلات الافتراضيه :
    كود:
    INSERT INTO `project` (`id`,`name`) VALUES (NULL,'Project1');
    
    INSERT INTO `item` (`id`,`project_id`,`name`) VALUES (NULL,1,'item1');
    INSERT INTO `item` (`id`,`project_id`,`name`) VALUES (NULL,1,'item2');
    
    INSERT INTO `comment` (`id`,`item_id`,`data`) VALUES (NULL,1,'C1');
    INSERT INTO `comment` (`id`,`item_id`,`data`) VALUES (NULL,1,'C2');
    INSERT INTO `comment` (`id`,`item_id`,`data`) VALUES (NULL,1,'C3');
    حتى تتضح الصورة في ترابط الجداول
    نفذ هذين الاستعلامين :

    كود:
    select * from item where project_id = '1'
    كود:
    select * from comment where item_id = '1'
    تلاحظ ان العلاقة مشروع واحد لعدة ادوات مربوطة ب project_id
    ايضا اداة واحده لعده تعليقات مروبوطة بـ item_id

    لو لدينا رقم التعليق 2 أريد اسم المشروع الذي ينتمي اليه باستعلام واحد فقط

    هذا السؤال سهل تقريبا ..


    السؤال الثاني نفس الجداول ونفس التركيب

    لدي المشروع رقم 1 أريد احذفه واحذف معه جميع محتوياته items & comments باستعلام واحد ايضا .... بشرط ان تتم العمليه حتى لو كان لايوجد اي شئ يربط به ....


    انتظركم





    __________________
    موقعي الشخصي
    www.Flasher.ws

    جزيرة الفنون
    www.Artsisland.net


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


    السلام عليكم
    فكرة جميلة منك هذا الموضوع
    إجابة السؤال الاول
    كود:
    SELECT `name` FROM `project` WHERE id=comment.id AND comment.id='2'
    أما الثاني

    كود:
    DELETE FROM `project`,`item`,`comment` WHERE project.id='1' AND item.project_id=project.id AND comment.item_id=project.id
    بصراحة توني في قواعد البيانات لحد الآن.
    وإن شاء الله إني ما جبت العيد

    أخوك
    الميموني





    __________________
    سـبـحـان الله، والـحــمــد لله، ولا إلـه إلا الله، والله أكـــبـــــر.

  3. #3
    عضو فعال
    تاريخ التسجيل
    Jun 2002
    المشاركات
    1,346


    بسم الله الرحمن الرحيم

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


    بالنسبة للسؤال الأول، الإجابة..
    كود:
    SELECT project.name FROM project
    INNER JOIN item INNER JOIN comment ON project.id=item.project_id AND item.id = comment.item_id WHERE comment.id = 2
    وبالنسبة للسؤال الثاني، اعذرني ..سأرفق إجابتي في وقت لاحق..

    آمل أن أكون قد وفقت

    تحياتي
    وما التوفيق إلا من عند الله






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


    1 - طريقة أخرى وهي نفس طريقة INNER JOIN فالجمله السابقه في Mysql تحول الى هذه الجمله ثم تعالج , لكن كتابة الاستعلام باستخدام INNER JOIN افضل من الطريقة العادية .
    كود:
    SELECT project.name
    FROM project,item,comment
    WHERE
    project.id = item.project_id
    AND item.id = comment.item_id
    AND comment.id = 2
    - حاليا السؤال الثاني ما اعرف





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

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


    مشكورين شباب نورتوا الموضوع ..

    ALMimoni

    مشكور على المشاركة والمحاولة ..

    PHP-Master02

    ماشاء الله حل موفق .. لكن بودي تشرح حتى تعم الفائدة لماذا استخدمت INNER JOIN وماهو الفرق بينها وبين JOIN العادية بدون INNER ؟... وبانتظارك

    daif

    بالفعل طريقتك توازي مايعمله ال JOIN ....

    ولازلنا ننتظر حل السؤال الثاني ... واللي بيجيبها يحط سؤال من عنده ...


    تحياتي،





    __________________
    موقعي الشخصي
    www.Flasher.ws

    جزيرة الفنون
    www.Artsisland.net

  6. LEFT JOIN



    جواب السؤال الثاني :
    يمكن الحذف باستخدام الـ LEFT JOIN بالترتيب التالي
    project
    item
    comment
    الترتيب بغاية الأهمية ..

    عبارة الـ SQL :
    كود:
    DELETE project,comment,item FROM 
    (project LEFT JOIN item ON item.project_id = project.id)
    LEFT JOIN comment ON comment.item_id = item.id 
    WHERE project.id = 1
    لاحظ العبارة التالية مشابهة إلى حد كبير جداً للعبارة السابقة لكن باختلاف ترتيب الجداول، وهي تؤدي إلى نتائج مختلفة عن العبارة السابقة :

    كود:
    DELETE comment,item,project
    FROM (comment LEFT JOIN item ON comment.item_id = item.id) 
    LEFT JOIN project ON item.project_id = project.id 
    WHERE project.id = 1
    حيث تقوم العبارة الأولى بحذف المشاريع حتى و إن لم تكن تحتوي على تعليقات أو items ، في حين أن الثانية لن تحذف المشروع إلى إذا كان يحتوي على تعليقات.

    ملاحظة : لعل الأفضل استخدام ما يسمى الـ cascade delete وهي عملية تقوم بحذف الأبناء ثم الآباء، لكنها تعمل مع المحرك InnoDB ولا تعمل مع MyISAM.


    أتمنى أن أكون وفقت للإجابة الصحيحة ..

    (( عدلت على هذا الرد ما يقارب العشرة مرات ، مشكلة لو طلع غلط في النهاية :funny: )





    __________________
    مدونتي الشخصية :
    http://www.mazen.ws
    عن البرمجة و تطوير المواقع و علوم الحاسب
    ماسنجر :
    desclub@hotmail.com
    بريد الكتروني :
    mazen@mazen.ws

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2007
    المشاركات
    393


    مازن مليباري
    الله ينور عليك 100%

    ومثل ماتفضلت الترتيب مهم للغاية الجدول المستخدم في FROM يكون بينهم عمليه اتحاد بينما اذا وضعت في LEFT JOIN تكون بينهم عمليه تقاطع ..

    بالنسبة cascade delete الحقيقة ماعندي خلفيه كبيره عنها (هي باستعمال الForign key ?) لكن اظن والله اعلم الصحيح "بحذف الاباء ثم الابناء"

    (( عدلت على هذا الرد ما يقارب العشرة مرات ، مشكلة لو طلع غلط في النهاية )
    ههههههه لا جبتها ماشاء الله عليك ..



    طيب بما انه مافيه احد حط سؤال

    فالسؤال يقول :

    لديك مصفوفتين

    كود PHP:
    $array1 = array(1,2);
    $array1 = array(3); 
    غير متساوية في عدد العناصر
    نريد جميع المصفوفات التي يمكن تكوينها من هاتين المصفوتين بدون تكرار
    مثال :
    {1,2}
    {3}

    الناتج

    {1}
    {2}
    {3}
    {1,2}
    {1,3}
    {2,3}



    :nice:





    __________________
    موقعي الشخصي
    www.Flasher.ws

    جزيرة الفنون
    www.Artsisland.net

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


    موضوع شيق اخي لكن الذي لم افهمه

    هل تريد ان تطلع النتائج هكذا بي اي طريقة
    {1}
    {2}
    {3}
    {1,2}
    {1,3}
    {2,3}

    ام من الضروري انشاء مصفوفات لاستخراج النتائج بهذة الطريقة
    وضح قليلا لاني وصلت شبه للحل

    سلامات





    __________________
    Bruce - مدونة شديدة التخصص في PHP وتطبيقات الويب

  9. Binary Counting - Subsets Generating Algortihm



    بالنسبة cascade delete نعم كما تفضلت أنها باستخدام الـ Foreign Key ، و حقيقة لست متأكد من ترتيب الحذف، لكن أرى أن حذف الأبناء أولاً ثم الأباء، لأن حذف الأب أولاً قد يسبب مشكلة في الـ referential integrity ..


    بخصوص سؤالك الثاني أظن أن هنالك شيء ناقص ، إذا كنت تبحث عن كل المجموعات الجزئية Subsets فبقيت مجموعتان لم تضعهما في مثالك و هما :
    {المجموعة الخالية - فاي}
    {1،2،3}

    أفترضت أنك تبحث عن كل المجموعات الجزئية، توجد عدة خوارزميات لتكوين المجموعات الجزئية أذكر منها الـ Gray Code و الـ Binary counting...

    قمت بتنفيذ خوارزمية الـ Binary Counting تجدها في المرفقات ..
    على أية حال حتى و إن لم يكن هذا هو المطلوب فيمكن ببساطة تعديل الكود ليتوافق مع متطلبك.

    كود PHP:
    <?php
    /*
     * Binary Counting - Subsets Generating Algorithm
     * Author: Mazen A. Melibari <mazen@mazen.ws>
    */

    $array1 = array(1,2);
    $array2 = array(3);

    $mergedArray array_merge($array1$array2);

    $subSets = array();
    for(
    $i 0$i pow(2count($mergedArray)); $i++)
    {
        
    $subSets[$i] = array();
        
    $binaryStringPadding count($mergedArray);
        
    $binaryString sprintf("%0{$binaryStringPadding}b"$i);

        echo 
    "$binaryString <br />";

        for(
    $j 0$j $binaryStringPadding$j++)
            if ( 
    $binaryString[$j] )
                
    $subSets[$i][] = $mergedArray[$j];
    }

    var_dump($subSets);
    ?>
    ملاحظة : المتغير subSets يحتوي على المجموعات الجزئية.





    الملفات المرفقة الملفات المرفقة
    __________________
    مدونتي الشخصية :
    http://www.mazen.ws
    عن البرمجة و تطوير المواقع و علوم الحاسب
    ماسنجر :
    desclub@hotmail.com
    بريد الكتروني :
    mazen@mazen.ws

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


    Bruce

    حياك الله انا كنت اقصد مصفوفة بها كل المصفوفات ..

    مازن مليباري

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

    وبانتظار مشاركة الاخوة ..





    __________________
    موقعي الشخصي
    www.Flasher.ws

    جزيرة الفنون
    www.Artsisland.net

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


    اظن ان الاخ مازن قام بالحل مشكورا

    سؤال ثاني
    عندي مصفوفة
    كود PHP:
    $output = array('girl''boy''man''woman'); 
    اريد ان استخرج القيمة الاخيرة فيها وهي woman
    بشرط عدم استعمال
    كود PHP:
    echo $output[3]; 
    كود PHP:
     وبدون استعمال [anything
    انتظر :con2:





    __________________
    Bruce - مدونة شديدة التخصص في PHP وتطبيقات الويب

  12. أحد دوال المصفوفات



    عزيزي Bruce .. سؤال جميل جداً ....
    لدي الإجابة وهي أحد دوال المصفوفات لها علاقة بالـ Queue .. لن أفصح أكثر و أترك المجال لغيري

    حيقولو هذا مشرف دكتاتوي :shy:





    __________________
    مدونتي الشخصية :
    http://www.mazen.ws
    عن البرمجة و تطوير المواقع و علوم الحاسب
    ماسنجر :
    desclub@hotmail.com
    بريد الكتروني :
    mazen@mazen.ws

  13. #13
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    اخيراً ممكن احاول اجاوب سؤال ههههههههه

    أعتقد هذي ممكنة :
    كود PHP:
    echo $output{3}; 
    ترى كذا ما استخدمنا [] ...

    الثانية :
    كود PHP:
     $arr = array("man""boy""woman");
     
    end($arr);
     echo 
    current($arr); 
    أعتقد الأخ مازن عنده حل آخر .. تراني ما اطلعت على كل دوال المانيوال ...

    ننتظر

    تحياتي، أشرف السمهوري








  14. أخي أشرف جوابك الثاني في قمة الروعة ..
    كنت أفكر في الدالة array_pop لكن جوابك أجمل

    ننتظر الحكم Bruce





    __________________
    مدونتي الشخصية :
    http://www.mazen.ws
    عن البرمجة و تطوير المواقع و علوم الحاسب
    ماسنجر :
    desclub@hotmail.com
    بريد الكتروني :
    mazen@mazen.ws

  15. #15
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    بالمناسبة في طريقة ثالثة خطرت ببالي .. وهي أطولها:
    كود PHP:
    while (list($key$value) = each($arr)) {
            
    $val $value;
    }
     
    echo 
    $val
    بالمناسبة الاستاذ مازن يقول هذي مثل " وين اذنك يا جحا " ..

    الله يسامحك فلاشر أشغلتنا بهالموضوع .. بس موضوع رائع وقوي من زمان محتاجين مثله ..

    تحياتي، أشرف السمهوري










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

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

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