؟؟؟؟؟؟؟؟؟؟
؟؟؟؟؟؟؟؟؟؟
ويييييييييييييييييييييييييييييييييييييييييييين
راح أحاول أوضح قد ما أقدر
في البداية عشان تجيب المرتبطين بالاب يكون عن طريق id الخاص بة
الجملة
مع الفرض أنة x هو id الخاص بالمستخدم الزهريكود:select * from tree where f_id=x
الان نريد الاصدقاء المرتبطين وهو البرتقالي والازرق فهنا نحتاج جدول أخر لان العلاقة n-m
يحوي الجدول حقلين هما id لنعرف عن طريقها الاصدقاء
فنضع رقم الزهري ثم رقم البرتقالي وهذا معناة أنهم أصدقاء
نحتاج جملتين الاولى لنحضر الصديق والاخرى لنحضر المرتبطين بالصديق
كود:select * from tree where tree.f_id=( select id1 as id from relation where id2=x union select id2 as id from relation where id1=x )
يمكنك أن تقوم بإنشاء جدول مثلا users وجواه :
friends1 tinytext
friends2 tinytext
friends3 tinytext
friends4 tinytext
ويكون بالشكل التالي :
وهي أرقام العضويات ..كود PHP:
friends1 = 15,66,88,99,433;
وكذلك يتم التعامل بعد بقية الدرجات ..
ولما تحب تشتغل عليهم تكسر من ال comma وتستخدم foreach
أين المشكلة بالضبط ؟
المشكلة انك طالب Design عام للداتا بيس .. وهذه صعبة جدا أن يقوم بتحديدها اي شخص غيرك .. لأنه يعرف إحتياجات البرنامج الذي تعمل عليه ..
اقترح ان تبدأ بأي نظام حاليا للداتا بيس .. وبعدها ممكن تعدل على الديزاين .. أينعم بيكون التعديل صعب .. ولكن علشان توصل لأفضل الحلول .. لابد أن تجرب بعض الأنظمة الخاطئة اولا
لا اعتقد ان المشكلة هي الاستعلام , المشكلة الان هي بناء الجداول , مثل هذه الجداول التى تعتبر على شكل شجرة وتفرعاتها ,مثلا برنامج شجرة العائله تحتاج الى جدولين هما:
- جدول الفروع ايا كان يتكون من رقم الفرع واسمه فقط (رقم الشخص واسمه).
- جدول الربط رقم الفرع + رقم الفرع المربوط فيه + (اختياري نوع الربط).
اعتقد صار واضح, نضيف الاشخاص , ثم نربطهم ببعض في جدول الربط , سعد اب لاحمد و ناصر.
في جدول الفروع يكون مضاف سعد , احمد , ناصر
في جدول الربط يكون مضاف سعد+احمد(اب) - سعد+ناصر(اب) - احمد+ناصر(اخ) ... وهكذا س+ص(العلاقه)
__________________
ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
الاتصال: daif@daif.net او جوال: 0556639884
الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .
طيب انا عندي جدول الاسماء وهو جدول اساسي وافتراضي وتصميمة عادي جدا
حقل ID وحقل ال P_ID حقل الربط
ولاان يقول الاخ ضيف يجب ان اضيف جدول اخر اخزن فية ما هية العلاقة . وهذا ما ليم يكن واضح لي رغم شرحة فحبذا لو مثال عملي . طبعا لا اطلب برمجية ولكن اطلب مثلا عملية التخزين كيف سوف تتم وما هي الحقول المفترضة
بالنسبة لدزيان بشكل عام فهذا بالفعل ما ينقصني لان اغلب البرمجيات لا تتطلب دزاين معقد ولكن في هذا الموضوع يبرز اهمية ترتيب المدخلات بالجدول .
اتمنى اخي ضيف ان توضح الفكرة تماما وكما تفضلت الموضوع كشجرة العائلة تماما ولكن ربما احد الفروع تزوج من احد الفروع الاخرى من الشجرة ما هي معاملتة ؟ + انت تريد ان تظهر 4 مستويات ابتادائا من اب معين . ما هية العملية التي يجب القيام بها .
شكرا للتفاعل العلمي .
الجدول الذي ذكرته علاقة واحدة فقط , اي لا يمكن من خلاله ان اضع اكثر من علاقه يعنى يجب ان يكون العنصر يرتبط مع عنصر اخر. برابط واحد , أب او ابن او اخ او ... لكن ما تريده انت يكون هذه الشخص اب لشخص وفي نفس الوقت اخ لاخر.
ملف البينات مرفق , وكذلك الصوره التى تشرح التصميم, أرجو ان يكون واضح (الشجره من الواقع )
__________________
ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
الاتصال: daif@daif.net او جوال: 0556639884
الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .
مشكور جدا يا ضيف
وجهد مشكور كتير علية بس صدقا الصورة تضيع اكثر من كونها ايضاح
لا تزعل مني الله يخليك بس جد تضيع والصورة لازم تكون شجرية كالتي وضعتها انا فوق . لانها اسهل على العين بالمتابعة ....
ثانيا لا يجوز تكرار علاقة الام و الاب لانها علاقة واحدة ويجب ان تكون اب .. يعني لا يوجد بعلاقات الشجرة ام واب .
طيب بعد تحليل الرسم لو طلبت منك ان تعطيني كل المرتبطين مع (أحمد) ؟ شو بتعمل مع العلم ان الرسم التوضيحي كما هو مبين .
ولو طلبت منك تعطيني كل المرتبطين مع سالم ؟
سوف ناخذ احمد بطريقنا وايذا سوف نصعد الى سعد مرتين . مرة من خلال سالم نفسة و مرة بالوصول الى سعد عن طريق أحمد . لذا وجب تحديد المستويات . يعني اربع مستويات وبعدها لا يجلب شيء .
حاسس ان الفكرة غلط ولكن لب الموضوع ان اضيف صديقك عندي فيصبح صديقك صديقي مع كل اصدقائة . الى 4 مستويات .
يعني الصديق + اصدقائة + اصدقاء اصدقائة + اصدقائ اصدقاء اصدقائة .
لا يجوز هل تقصد شرعيا ام برمجيا لم افهم القصد .
الجدولين السابقه تستطيع ان تبنى به شجره كائنات لاي برنامج بشكل كامل , واذا كنت تريد ان وضع خصائص لهذه الكائنات يجب عليك وضع جدول ثالث(3 حقول) يحمل رقم الفرق + الخاصيه + قيمتها.(مثل المستخدمين والمجموعات والصلاحيات)
__________________
ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
الاتصال: daif@daif.net او جوال: 0556639884
الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .
طيب لو سمحت فضلا
اعطيني المسار الذي يوصلك الى حاتم . على ان يكون المعرف الذي تبدا منه هو احمد .
ما هي التعليمة ال SQL
ارجو الإفادة
هذه سوف يعطيك ابناء , تعليمه عاديه , ومن الناتج تستعلم عن ابنائهم على شكل دوار , او العكس تبدأ بأبن وتستعلم عن اباء.
استعلام الحصول على الابناء التابعين لاحمد
استعلام الحصول على الاباء التابعين لحاتمكود:SELECT pid FROM `tree_rel` WHERE id = 3 AND tid=1;
كود:SELECT id FROM `tree_rel` WHERE pid = 7 AND tid=1;
__________________
ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
الاتصال: daif@daif.net او جوال: 0556639884
الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .
اخي ضيف الطريقة المطروحة من قبلك تعتمد مبدأ الـrecursive وهو مدا جيد للقواعد الصغيرة و المتوسطة ولكن لو اردت ان تجلب ابناء ابناء ابناء احدهم فسوف نقع بمشكلة انك لكل اب نفذت تعليمة SQL للحصول على ابنائة . وهنا الخطا الشائع .
حيث ان ذلك غير مفيد بالمرة إذن أنك سوف تعاني من بطء شديد في قاعدة البينات لكثرة التعليمات المرسلة للقاعدة .
بعد دراسة مستفيضة بالمجال وجدت ان أنجح طريقة هي التالية :
http://dev.mysql.com/tech-resources/...ical-data.html
ولكن المشكلة التي اواجهها مع هذة الطريقة انه لنفرض انه حدث تزاوج بين طرفين من الشجرة كيف سوف نحلها ؟