اذهب إلى المحتوى

السؤال

نشر (معدل)

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

جدول العناصر   item

item (item_id, item_name)

جداول التصنيفات        category, sub- category 1, sub-category 2  

category(category_id, category_name)

sub-category1(sub-category1_id, sub-category1_name)

sub-category2(sub-category2_id, sub-category2_name)

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

تم التعديل في بواسطة Our World عالمنا
تنسيق الشيفرة وتوضيح العنوان

Recommended Posts

  • 0
نشر

في حال كنت تريد أن يحوي العنصر عدة فئات من كل جدول على حدى لا بد من انشاء جدول ربط لكل جدول فئات على حدى:

items_categories (item_id, category_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (category_id) REFERENCES category(category_id)


items_sub_categories_1 (item_id, sub_category_1_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (sub_category_1_id) REFERENCES sub-category1(sub-category1_id)


items_sub_categories_2 (item_id, sub_category_2_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (sub_category_2_id) REFERENCES sub-category2(sub-category2_id)

 ثم الاستعلام عن العنصر مع ربط فئاته الثلاث ضمن الاستعلام كالتالي:

SELECT * FROM item
LEFT JOIN category ON item.item_id=category.item_id
LEFT JOIN sub-category1 ON item.item_id=sub-category1.item_id
LEFT JOIN sub-category2 ON item.item_id=sub-category2.item_id

 

  • 0
نشر
بتاريخ 14 ساعات قال Hassan Hedr:

في حال كنت تريد أن يحوي العنصر عدة فئات من كل جدول على حدى لا بد من انشاء جدول ربط لكل جدول فئات على حدى:


items_categories (item_id, category_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (category_id) REFERENCES category(category_id)


items_sub_categories_1 (item_id, sub_category_1_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (sub_category_1_id) REFERENCES sub-category1(sub-category1_id)


items_sub_categories_2 (item_id, sub_category_2_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (sub_category_2_id) REFERENCES sub-category2(sub-category2_id)

 ثم الاستعلام عن العنصر مع ربط فئاته الثلاث ضمن الاستعلام كالتالي:


SELECT * FROM item
LEFT JOIN category ON item.item_id=category.item_id
LEFT JOIN sub-category1 ON item.item_id=sub-category1.item_id
LEFT JOIN sub-category2 ON item.item_id=sub-category2.item_id

 

انت كده ربطت جدول الـ item  مع جداول التصنيفات الثلاث..

لماذا لم تربط جداول التصنيفات الثلاث مع بعضها البعض بحيث يتفرع عن التصنيف الرئيسي (category) تصنيفان تابعان هما

(sub-category1 & sub-category2)

  عشان لما اضيف الـ item  تبع تصنيف فرعي اعرف أوصل للأب والأب الأكبر  ؟

بتاريخ 14 ساعات قال Hassan Hedr:

في حال كنت تريد أن يحوي العنصر عدة فئات من كل جدول على حدى لا بد من انشاء جدول ربط لكل جدول فئات على حدى:


items_categories (item_id, category_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (category_id) REFERENCES category(category_id)


items_sub_categories_1 (item_id, sub_category_1_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (sub_category_1_id) REFERENCES sub-category1(sub-category1_id)


items_sub_categories_2 (item_id, sub_category_2_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (sub_category_2_id) REFERENCES sub-category2(sub-category2_id)

 ثم الاستعلام عن العنصر مع ربط فئاته الثلاث ضمن الاستعلام كالتالي:


SELECT * FROM item
LEFT JOIN category ON item.item_id=category.item_id
LEFT JOIN sub-category1 ON item.item_id=sub-category1.item_id
LEFT JOIN sub-category2 ON item.item_id=sub-category2.item_id

 

تقصد اني محتاج 3 جداول وسيطة زيادة على الجداول اللى انا ذكرت اسمائها فى السؤال الاول؟

  • 0
نشر
بتاريخ الآن قال Our World عالمنا:

انت كده ربطت جدول الـ item  مع جداول التصنيفات الثلاث..

لماذا لم تربط جداول التصنيفات الثلاث مع بعضها البعض بحيث يتفرع عن التصنيف الرئيسي (category) تصنيفان تابعان هما

(sub-category1 & sub-category2)

  عشان لما اضيف الـ item  تبع تصنيف فرعي اعرف أوصل للأب والأب الأكبر  ؟

يمكن تنفيذ المطلوب بعدة طرق، تختار الأنسب لمشروعك، في حال كنت تريد هرمية في تبعية التصنيفات مع بعضها الطريقة الأسهل هي وضعها بجدول واحد، ولك سجل منها يوجد مفتاح ربط مع السجل الأب لها، بذلك يمكنك إنشاء هرمية تصنيفات تصل لأكثر من 3 مراحل

categories (category_id, parent_category_id, item_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (parent_category_id) REFERENCES categories(category_id)

مجددًا الأمر يعتمد على طبيعة المشروع والمطلوب منك

  • 0
نشر

اللى تعلمته انى لما اربط جدولين اضع foreign key  واحد فى احد الجدولين واجعله يشير للجدول الاخر..

انت كده استخدمت two foreign keys واحد فى جدول الـ item  والتاني فى الجدول المربوط معه وهو الـ category   .. صح كده؟؟

بتاريخ 13 دقائق مضت قال Hassan Hedr:

يمكن تنفيذ المطلوب بعدة طرق، تختار الأنسب لمشروعك، في حال كنت تريد هرمية في تبعية التصنيفات مع بعضها الطريقة الأسهل هي وضعها بجدول واحد، ولك سجل منها يوجد مفتاح ربط مع السجل الأب لها، بذلك يمكنك إنشاء هرمية تصنيفات تصل لأكثر من 3 مراحل


categories (category_id, parent_category_id, item_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (parent_category_id) REFERENCES categories(category_id)

مجددًا الأمر يعتمد على طبيعة المشروع والمطلوب منك

لو عندك لينك لفيديوهات عملية.. اكون شاكر لو ارسلت اللينك

  • 0
نشر
بتاريخ 30 دقائق مضت قال Our World عالمنا:

اللى تعلمته انى لما اربط جدولين اضع foreign key  واحد فى احد الجدولين واجعله يشير للجدول الاخر..

انت كده استخدمت two foreign keys واحد فى جدول الـ item  والتاني فى الجدول المربوط معه وهو الـ category   .. صح كده؟؟

لو عندك لينك لفيديوهات عملية.. اكون شاكر لو ارسلت اللينك

الأمر يعتمد على طبيعة العلاقة بين الجدولين:

  • في حال كان السجل ينتمي لسجل آخر نضع مفتاح الربط ضمن السجل
  • في حال كانت عدة سجلات تنتمي لسجل ما، نضع مفتاح السجل في كل سجل مرتبط به في الجداول الأخرى
  • في حال كان السجل ينتمي لعدة سجلات ضمن الجدول، والسجلات ضمن الجدول الآخر تنتمي لعدة سجلات من الجدول الأول نسمي هذه العلاقة Many to Many ولتنفيذها يجب وضع جدول وسيط يحوي مفاتيح ربط لكل من الجدولين، كما في الطريقة الأولى

المقال التالي مفيد جدًا لك، حاول التمعن به وفهم أنواع العلاقات بين الجداول وكيفية تطبيقها:

 

  • 0
نشر
بتاريخ 3 ساعات قال Our World عالمنا:

اللى تعلمته انى لما اربط جدولين اضع foreign key  واحد فى احد الجدولين واجعله يشير للجدول الاخر..

انت كده استخدمت two foreign keys واحد فى جدول الـ item  والتاني فى الجدول المربوط معه وهو الـ category   .. صح كده؟؟

لو عندك لينك لفيديوهات عملية.. اكون شاكر لو ارسلت اللينك

 

بتاريخ 3 ساعات قال Hassan Hedr:

يمكن تنفيذ المطلوب بعدة طرق، تختار الأنسب لمشروعك، في حال كنت تريد هرمية في تبعية التصنيفات مع بعضها الطريقة الأسهل هي وضعها بجدول واحد، ولك سجل منها يوجد مفتاح ربط مع السجل الأب لها، بذلك يمكنك إنشاء هرمية تصنيفات تصل لأكثر من 3 مراحل


categories (category_id, parent_category_id, item_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (parent_category_id) REFERENCES categories(category_id)

مجددًا الأمر يعتمد على طبيعة المشروع والمطلوب منك

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

  • 0
نشر
بتاريخ 7 ساعات قال Our World عالمنا:

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

 الجدول هنا بصيغته الكاملة فقط أضفنا مفتاح يشير إلى الجدول نفسه، الاستعلام يكون كما يلي :

SELECT * FROM items
LEFT JOIN categories as sub_category_1 ON sub_category_1.item_id = items.item_id 
LEFT JOIN categories as sub_category_2 ON sub_category_2.parent_category_id = sub_category_1.category_id
LEFT JOIN categories as sub_category_3 ON sub_category_3.parent_category_id = sub_category_2.category_id

 

  • 0
نشر
بتاريخ 15 ساعات قال Hassan Hedr:

يمكن تنفيذ المطلوب بعدة طرق، تختار الأنسب لمشروعك، في حال كنت تريد هرمية في تبعية التصنيفات مع بعضها الطريقة الأسهل هي وضعها بجدول واحد، ولك سجل منها يوجد مفتاح ربط مع السجل الأب لها، بذلك يمكنك إنشاء هرمية تصنيفات تصل لأكثر من 3 مراحل


categories (category_id, parent_category_id, item_id)
FOREIGN KEY (item_id) REFERENCES item(item_id)
FOREIGN KEY (parent_category_id) REFERENCES categories(category_id)

مجددًا الأمر يعتمد على طبيعة المشروع والمطلوب منك

قمت باضافة المفاتيح كما أوضحت..يعطيني رسالة

can't add or update a child row

#1452 - Cannot add or update a child row: a foreign key constraint fails (`project`.`#sql-dc8_186`, CONSTRAINT `#sql-dc8_186_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `items` (`item_id`))

  • 0
نشر
بتاريخ 1 دقيقة مضت قال Our World عالمنا:

قمت باضافة المفاتيح كما أوضحت..يعطيني رسالة

can't add or update a child row

#1452 - Cannot add or update a child row: a foreign key constraint fails (`project`.`#sql-dc8_186`, CONSTRAINT `#sql-dc8_186_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `items` (`item_id`))

حاول جعل الحقل item_id في الجدول categories يقبل NULL وستحل المشكلة، طريقة أفضل للقيام بذلك هو تغيير بنية الجدولين وإزالة item_id من جدول categories وإضافة حقل جديد category_id ضمن الجدول items يربط مع المعرف للجدول categories

  • 0
نشر (معدل)
بتاريخ 13 ساعات قال Hassan Hedr:

 الجدول هنا بصيغته الكاملة فقط أضفنا مفتاح يشير إلى الجدول نفسه، الاستعلام يكون كما يلي :


SELECT * FROM items
LEFT JOIN categories as sub_category_1 ON sub_category_1.item_id = items.item_id 
LEFT JOIN categories as sub_category_2 ON sub_category_2.parent_category_id = sub_category_1.category_id
LEFT JOIN categories as sub_category_3 ON sub_category_3.parent_category_id = sub_category_2.category_id

 

لو عايز استدعي التصنيفات  مع بعض فقط دون الـ items  كيف يكون الاستعلام 

تم التعديل في بواسطة Our World عالمنا
خطأ فى الكتابة
  • 0
نشر
بتاريخ 8 دقائق مضت قال Our World عالمنا:

لو عايز استدعي التصنيفات  مع بعض فقط دون الـ items  كيف يكون الاستعلام 

بدّل الاستعلام select بالجدول الذي تريد ثم قم بعمل الربط ضمن الاستعلام باستخدام JOIN كالسابق مع الجدول نفسه

  • 0
نشر
بتاريخ 20 دقائق مضت قال Our World عالمنا:

الرجاء كتابة الاستعلام.. جزاك الله خيرا

لا يمكن حل الواجبات أو المهام، حاول بناء الاستعلام بنفسك وفي حال واجهت مشكلة ما يمكنك إرفاق نتيجتك واستفسارك حولها،

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

 

  • 0
نشر
بتاريخ 9 دقائق مضت قال Hassan Hedr:

لا يمكن حل الواجبات أو المهام، حاول بناء الاستعلام بنفسك وفي حال واجهت مشكلة ما يمكنك إرفاق نتيجتك واستفسارك حولها،

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

 

انا لا اطلب حل واجبات.. انا اتعلم ذاتيا والمصادر 90% منها نظري بدون تطبيق على موقع فعلي..

ثانيا: لكي استخدم join لابد ان يكون هناك اسمين مختلفين والجدول واحد وليس به الا حقل اسم واحد

  • 0
نشر
بتاريخ 40 دقائق مضت قال Our World عالمنا:

لكي استخدم join لابد ان يكون هناك اسمين مختلفين والجدول واحد وليس به الا حقل اسم واحد

ليس بالضرورة، المعامل JOIN يحدد علاقة بين طرفين ومن الممكن أن يكون الطرفين هما الجدول نفسه، فقط عليك أن تحدد شرط الربط أي تحديد الحقلين الذين يجب الربط عبرهما في كل طرف

  • 0
نشر
بتاريخ 7 دقائق مضت قال Hassan Hedr:

ليس بالضرورة، المعامل JOIN يحدد علاقة بين طرفين ومن الممكن أن يكون الطرفين هما الجدول نفسه، فقط عليك أن تحدد شرط الربط أي تحديد الحقلين الذين يجب الربط عبرهما في كل طرف

استخدمت هذا الاستعلام ولكن يعطي رسالة خطأ

SELECT * FROM categories AS sub_category_1, sub_category_2, sub_category_3
 JOIN categories as sub_category_1 ON sub_category_1.category_id = sub_category_1.parent_category_id 
 JOIN categories as sub_category_2 ON sub_category_2.parent_category_id = sub_category_1.category_id
 JOIN categories as sub_category_3 ON sub_category_3.parent_category_id = sub_category_2.category_id

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...