Our World عالمنا نشر 24 فبراير 2022 أرسل تقرير نشر 24 فبراير 2022 (معدل) ما الطريقة الصحيحة لربط جدول للعناصر مع ثلاث جداول للتقسيمات كالاتى: جدول العناصر 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) بحيث أستطيع ان استدعي اسفل العنصر أسماء كل جداول التقسيمات التابعة له تم التعديل في 24 فبراير 2022 بواسطة Our World عالمنا تنسيق الشيفرة وتوضيح العنوان 1 اقتباس
0 Hassan Hedr نشر 24 فبراير 2022 أرسل تقرير نشر 24 فبراير 2022 في حال كنت تريد أن يحوي العنصر عدة فئات من كل جدول على حدى لا بد من انشاء جدول ربط لكل جدول فئات على حدى: 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 Our World عالمنا نشر 24 فبراير 2022 الكاتب أرسل تقرير نشر 24 فبراير 2022 بتاريخ 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 جداول وسيطة زيادة على الجداول اللى انا ذكرت اسمائها فى السؤال الاول؟ 1 اقتباس
0 Hassan Hedr نشر 24 فبراير 2022 أرسل تقرير نشر 24 فبراير 2022 بتاريخ الآن قال 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 Our World عالمنا نشر 24 فبراير 2022 الكاتب أرسل تقرير نشر 24 فبراير 2022 اللى تعلمته انى لما اربط جدولين اضع 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 Hassan Hedr نشر 24 فبراير 2022 أرسل تقرير نشر 24 فبراير 2022 بتاريخ 30 دقائق مضت قال Our World عالمنا: اللى تعلمته انى لما اربط جدولين اضع foreign key واحد فى احد الجدولين واجعله يشير للجدول الاخر.. انت كده استخدمت two foreign keys واحد فى جدول الـ item والتاني فى الجدول المربوط معه وهو الـ category .. صح كده؟؟ لو عندك لينك لفيديوهات عملية.. اكون شاكر لو ارسلت اللينك الأمر يعتمد على طبيعة العلاقة بين الجدولين: في حال كان السجل ينتمي لسجل آخر نضع مفتاح الربط ضمن السجل في حال كانت عدة سجلات تنتمي لسجل ما، نضع مفتاح السجل في كل سجل مرتبط به في الجداول الأخرى في حال كان السجل ينتمي لعدة سجلات ضمن الجدول، والسجلات ضمن الجدول الآخر تنتمي لعدة سجلات من الجدول الأول نسمي هذه العلاقة Many to Many ولتنفيذها يجب وضع جدول وسيط يحوي مفاتيح ربط لكل من الجدولين، كما في الطريقة الأولى المقال التالي مفيد جدًا لك، حاول التمعن به وفهم أنواع العلاقات بين الجداول وكيفية تطبيقها: اقتباس
0 Our World عالمنا نشر 24 فبراير 2022 الكاتب أرسل تقرير نشر 24 فبراير 2022 بتاريخ 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 Hassan Hedr نشر 25 فبراير 2022 أرسل تقرير نشر 25 فبراير 2022 بتاريخ 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 Our World عالمنا نشر 25 فبراير 2022 الكاتب أرسل تقرير نشر 25 فبراير 2022 بتاريخ 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 Hassan Hedr نشر 25 فبراير 2022 أرسل تقرير نشر 25 فبراير 2022 بتاريخ 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 Our World عالمنا نشر 25 فبراير 2022 الكاتب أرسل تقرير نشر 25 فبراير 2022 (معدل) بتاريخ 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 كيف يكون الاستعلام تم التعديل في 25 فبراير 2022 بواسطة Our World عالمنا خطأ فى الكتابة اقتباس
0 Hassan Hedr نشر 25 فبراير 2022 أرسل تقرير نشر 25 فبراير 2022 بتاريخ 8 دقائق مضت قال Our World عالمنا: لو عايز استدعي التصنيفات مع بعض فقط دون الـ items كيف يكون الاستعلام بدّل الاستعلام select بالجدول الذي تريد ثم قم بعمل الربط ضمن الاستعلام باستخدام JOIN كالسابق مع الجدول نفسه اقتباس
0 Our World عالمنا نشر 25 فبراير 2022 الكاتب أرسل تقرير نشر 25 فبراير 2022 بتاريخ 42 دقائق مضت قال Hassan Hedr: بدّل الاستعلام select بالجدول الذي تريد ثم قم بعمل الربط ضمن الاستعلام باستخدام JOIN كالسابق مع الجدول نفسه الرجاء كتابة الاستعلام.. جزاك الله خيرا اقتباس
0 Hassan Hedr نشر 25 فبراير 2022 أرسل تقرير نشر 25 فبراير 2022 بتاريخ 20 دقائق مضت قال Our World عالمنا: الرجاء كتابة الاستعلام.. جزاك الله خيرا لا يمكن حل الواجبات أو المهام، حاول بناء الاستعلام بنفسك وفي حال واجهت مشكلة ما يمكنك إرفاق نتيجتك واستفسارك حولها، أنصحك بقراءة المقال التالي سيمكنك من فهم العلاقات بين الجداول وكيفية بناء الاستعلامات بينها بشكل صحيح اقتباس
0 Our World عالمنا نشر 25 فبراير 2022 الكاتب أرسل تقرير نشر 25 فبراير 2022 بتاريخ 9 دقائق مضت قال Hassan Hedr: لا يمكن حل الواجبات أو المهام، حاول بناء الاستعلام بنفسك وفي حال واجهت مشكلة ما يمكنك إرفاق نتيجتك واستفسارك حولها، أنصحك بقراءة المقال التالي سيمكنك من فهم العلاقات بين الجداول وكيفية بناء الاستعلامات بينها بشكل صحيح انا لا اطلب حل واجبات.. انا اتعلم ذاتيا والمصادر 90% منها نظري بدون تطبيق على موقع فعلي.. ثانيا: لكي استخدم join لابد ان يكون هناك اسمين مختلفين والجدول واحد وليس به الا حقل اسم واحد اقتباس
0 Hassan Hedr نشر 25 فبراير 2022 أرسل تقرير نشر 25 فبراير 2022 بتاريخ 40 دقائق مضت قال Our World عالمنا: لكي استخدم join لابد ان يكون هناك اسمين مختلفين والجدول واحد وليس به الا حقل اسم واحد ليس بالضرورة، المعامل JOIN يحدد علاقة بين طرفين ومن الممكن أن يكون الطرفين هما الجدول نفسه، فقط عليك أن تحدد شرط الربط أي تحديد الحقلين الذين يجب الربط عبرهما في كل طرف اقتباس
0 Our World عالمنا نشر 25 فبراير 2022 الكاتب أرسل تقرير نشر 25 فبراير 2022 بتاريخ 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 اقتباس
السؤال
Our World عالمنا
ما الطريقة الصحيحة لربط جدول للعناصر مع ثلاث جداول للتقسيمات كالاتى:
جدول العناصر item
جداول التصنيفات category, sub- category 1, sub-category 2
بحيث أستطيع ان استدعي اسفل العنصر أسماء كل جداول التقسيمات التابعة له
تم التعديل في بواسطة Our World عالمناتنسيق الشيفرة وتوضيح العنوان
16 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.