-
المساهمات
15426 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
403
إجابات الأسئلة
-
إجابة Mustafa Suleiman سؤال في اود تعلم الذكاء الاصطناعي ( تعلم الألة ) .. واريد خطة واضحة لكي لا اضيع وقتي كانت الإجابة المقبولة
أنت لم تضيع وقتك في تعلم ما ذكرته وهو جافاسكريبت و React Native، بل على العكس هناك طلب على مطوري React Native الجيدين.
ودائمًا أصعب لغة هي لغة البرمجة الأولى، وأنت الآن قمت بدخول مجال البرمجة وأصبح لديك أساسيات تستند إليها لتعلم ما تريد في المجالات المختلفة، فبالطبع الفرق كبير بينك وبين من يريد تعلم مجال مثل (تعلم الآلة) وهو بعيد تمامًا عن مجال البرمجة.
لكن قبل إختيار المجال، عليك تحديد الوقت المتاح لك للحصول على وظيفة ويجب تحديد وقت واقعي وليس أمنيات، في حال كان الوقت المتاح لك سنة أو أقل، إذن مجال تعلم الآلة ليس لك.
ابحث في سوق العمل لديك عن المجالات المطلوبة والتي تطلب خبرة سنة أو أقل ثم قم بتعلم المهارات المطلوبة، تلك هي الطريقة الصحيحة لدخول سوق العمل، والبحث يتم على مواقع التوظيف مثل LinkedIn و indeed و Bayt.
-
إجابة Mustafa Suleiman سؤال في git (repositories already exist) كانت الإجابة المقبولة
الرابط الصحيح للمستودع لديك هو التالي:
https://github.com/Ahmed-ALfadaly/Travel_Agency.github.io لذا عليك تعديل الرابط من خلال التالي:
git remote set-url origin https://github.com/Ahmed-ALfadaly/Travel_Agency.github.io ثم تنفيذ الأوامر الأخرى.
-
إجابة Mustafa Suleiman سؤال في عدم العثور على علامة التبويب "Keys" في حساب مطور Apple لإنشاء API Key لـ Fastlane كانت الإجابة المقبولة
حاليًا توجه إلى تبويب Integration ثم من هناك تستطيع إنشاء مفتاح.
-
إجابة Mustafa Suleiman سؤال في استفسار حول خدمة Authentication من الفايربيز كانت الإجابة المقبولة
خدمات تسجيل الدخول من خلال، signInWithGoogle، signInWithApple وحسابات جوجل جيميل وابل كلاود، مجانية بدون حدود أو قيود ولا يوجد عدد محدد لعدد المستخدمين خلال الشهر الواحد.
وباستطاعتك الإعتماد على الخدمات مجانًا دون الحاجة إلى الانتقال إلى الباقة المدفوعة.
بينما "Other Authentication services" تشير إلى خدمات تسجيل دخول أخرى غير مدعومة بشكل مباشر من Firebase، ومنها:
تويتر فيسبوك GitHub https://firebase.google.com/docs/auth
https://firebase.google.com/docs/auth/flutter/start
-
إجابة Mustafa Suleiman سؤال في استفسار حول ظهور التطبيقات في سوق جوجل بلاي كانت الإجابة المقبولة
الأمر راجع لإحتمالات مختلفة، فربما يكون اسم التطبيق طويلًا جدًا أو يحتوي على رموز خاصة أو كلمات غير متداولة، فمن الأفضل أن يكون اسم التطبيق قصير ووصفًا وسهل الفهم.
أو وصف التطبيق غير كافي أو ليس ذا صلة بكلمات البحث التي يستخدمها المستخدمون، قم بوضع وصف التطبيق بشكل يحتوي بالكلمات الرئيسية ويوضح وظائف التطبيق وفوائده.
وقد يكون تصنيف التطبيق مناسبًا لفئة التطبيق، فاختر تصنيف دقيق يعكس محتوى التطبيق ووظائفه.
أو عدد تحميلات التطبيق كافيًا لجعله يظهر في نتائج البحث، لذلك حاول الترويج لتطبيقك من خلال قنوات مختلفة لجذب المزيد من المستخدمين.
بالإضافة إلى أنّ فهرسة التطبيق بواسطة Google Play يستغرق بعض الوقت بعد نشره، فانتظر بعض الوقت.
-
إجابة Mustafa Suleiman سؤال في مشكلة تأخر عملية البناء لمشروع flutter في xcode كانت الإجابة المقبولة
الأمر طبيعي بالفعل على Xcode، ولحل المشكلة عليك استخدام النسخة المجمعة مسبقًا pre-compiled من Firestore iOS SDK.
https://github.com/invertase/firestore-ios-sdk-frameworks وستجد أن وقت البناء انخفض بشكل كبير.
وذلك بسبب أن النسخة الغير مجمعة مسبقًا من Firestore iOS SDK بها 500+ ألف سطر برمجي تخيلي أن ذلك يتم تجميعه في وقت البناء؟
في ملف ios/Podfile.lock تفقد نسخة Firebase iOS SDK وكمثال هنا هي نسخة 9:
PODS: - cloud_firestore (3.2.1): - Firebase/Firestore (= 9.2.0) - firebase_core - Flutter عليك تفقد هل يوجد نسخة مجمعة لذلك الإصدار أم لا وحاليًا متوفر حتى الإصدار 10.21.0.
ثم تغيير النسخة في ios/Podfile لتشير للنسخة المجمعة كالتالي:
pod 'FirebaseFirestore', :git => 'https://github.com/invertase/firestore-ios-sdk-frameworks.git', :tag => '10.19.0'
-
إجابة Mustafa Suleiman سؤال في سؤال عن سجلات dns في الدومين كانت الإجابة المقبولة
بالطبع تستطيع إزالتها ذلك للتأكد من أنك صاحب الموقع بالفعل بعد التأكيد يمكنك حذفها لا مشكلة.
-
إجابة Mustafa Suleiman سؤال في كيف يمكنني زيادة سرعة الموقع مع استخدام صور ذات جودة عالية كانت الإجابة المقبولة
بالتأكيد أنت تستخدم الصور بحجمها الكامل وأيضًا لم تقم بضغطها مع استخدام صيغة مناسبة لكي لا تفقد جودتها، وتستطيع فعل ذلك من خلال الفوتشوب من خلال تصغير حجم الصور لتكون ضعف الحجم الذي تريد عرضها به، مثلاً لو تريد 500 بكسل ستكون الصورة 1000 بكسل لكي تظهر بجودة جيدة على الهواتف التي بها تقنية الـ double pixel.
ثم حفظها بصيغة webp أو avif.
وإذا لم ترد استخدام الفوتشوب تستطيع استخدام موقع Squoosh من خلال المتصفح، لتنفيذ ما سبق.
-
إجابة Mustafa Suleiman سؤال في مشكل Human Verification عند تصفح الأكاديمية كانت الإجابة المقبولة
ذلك طبيعي حيث يتم تفقد الإتصال الخاص بك من وقت لآخر أثناء تصفح الأكاديمية، لكن هناك تعارض بين Salfeld و ميزة human verification في cloudflare.
حاول تجربة استخدام vpn من أجل تمكن الدخول للموقع ثم تعطيله بعد نجاح الدخول، وهناك إضافات على المتصفح مثل Windscribe.
https://chrome.google.com/webstore/detail/hnmpcagpplmpfojmgmnngilcnanddlhb وإن أمكن تعطيل Salfeld أثناء تصفح الأكاديمية فسيحل ذلك المشكلة.
-
إجابة Mustafa Suleiman سؤال في ال size() function مش بتشتغل معايا كانت الإجابة المقبولة
لأن دالة size() التي تستخدمها غير متوفرة في مكتبة C++ القياسية، وهناك وظائف مختلفة تسمى size() تعمل مع هياكل بيانات مختلفة، لكن تلك التي تستخدمها قد تكون خاصة بمكتبة معينة أو قد تكون وظيفة مخصصة لم تحددها.
استخدام عامل sizeof() (للمصفوفات على غرار C) مثل numbers في الكود لديك، للحصول على عدد العناصر، ومع ذلك، لاحظ أن ذلك يرجع الحجم الكلي للمصفوفة بالبايتات، وليس عدد العناصر:
#include <iostream> using namespace std; int main() { int numbers[] = {10, 20, 3, 30, 5, 7, 40}; int numssize = sizeof(numbers) / sizeof(numbers[0]); cout << numssize << endl; // Output: 7 return 0; } وإن كنت تستخدم عناصر من مكتبة Standard Template Library (STL) ، مثل المتجهات أو المصفوفات أو السلاسل، فتستطيع الإعتماد على دالة std::size():
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers = {10, 20, 3, 30, 5, 7, 40}; int numssize = std::size(numbers); cout << numssize << endl; // Output: 7 return 0; } ولو لديك وظيفة مخصصة أو مكتبة تحدد دالة size() خصيصًا لحالة استخدامك، فتحتاج إلى التأكد من أن الوظيفة مرئية في نطاق وظيفتك main()، وتحقق من مكان تعريف الوظيفة وتضمين الرؤوس أو الملفات الضرورية لإحضارها إلى النطاق.
-
إجابة Mustafa Suleiman سؤال في إطار Next.Js هل هو باك اند أم فرونت اند ؟ كانت الإجابة المقبولة
الأمر محير بالفعل، ويجعلك تتسائل هل نحن بحاجة إلى واجهة خلفية عند استخدام Next.js؟
أولاً Next.js مبني على بيئة Node.js بالفعل، أي مضمن بداخله Node.js.
ومشاريع Next.js وNode.js تستطيع نشرهم على سيرفر عادي ولا يشترط أن نشر تطبيقات Next.js على منصة تدعم الـ serverless.
وتستطيع من خلال Next.js إنشاء واجهة خلفية لتطبيقك بالفعل، من خلال إنشاء API's والتعامل مع قاعدة البيانات، فكما ذكرت الإطار مبني فوق بيئة Node.js.
وبشكل مفصل لنتعرف أولاً على دورة حياة طلب الجزء الخلفي وتبدو تقريبًا كما يلي:
المصادقة التفويض فك تسلسل الطلب (= ضمني في NodeJS / أو اللغات ديناميكية أي يحدث تلقائيًا في الخلفية) التحقق من صحة الطلب استرجاع الكائنات ذات الصلة business logic (كيفية عمل الخادم وكيفية تفاعله مع البيانات) الآثار الجانبية Side effects (ليس فقط التخزين في قاعدة البيانات، ولكن إرسال البريد الإلكتروني، واستدعاء خدمة خارجية أخرى، إلخ) ربط نموذج البيانات برد API تنطبق تلك الخطوات سواء كنت تستخدم GraphQL أو REST أو gRPC أو أي بروتوكول آخر.
وكل ذلك تستطيع تسطيع تنفيذه من خلال Next.js لا مشكلة في ذلك، وبشكل مختصر الإطار ممتاز جدًا ويغنيك عن إنشاء واجهة خلفية بشكل منفصل في حال كان المشروع يتمحور أكثر نحو الواجهة الأمامية، أما في حالة العكس فستحتاج إلى واجهة خلفية منفصلة للتعامل مع الأمور المعقدة.
-
إجابة Mustafa Suleiman سؤال في مشكلة في تشغيل برنامج Xampp كانت الإجابة المقبولة
قمت بتشغيل xampp كمسؤول وأعد الخطوات مرة ثم حاول التشغيل:
-
إجابة Mustafa Suleiman سؤال في اريد داتا لتجار جمله من اين احصل عليها كانت الإجابة المقبولة
عليك شراء تلك الداتا أو سحبها بنفسك في حال توافرت، ابحث على جوجل عن "سحب داتا للإعلانات" وهناك مواقع توفر لك داتا بجودة عالية وأيضًا تفقد جروبات الفيس بوك المختصة بذلك.
-
إجابة Mustafa Suleiman سؤال في شرح أنواع العلاقات في django كانت الإجابة المقبولة
أرجو التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل وطرح الأسئلة العامة هنا، وستجد المقالات والنقاشات التالية عونًا لك:
وتصنف العلاقات في Django إلى ثلاثة أنواع رئيسية:
علاقات واحد إلى واحد (One-to-One Relationships) علاقات واحد إلى كثير (One-to-Many Relationships) علاقات كثير إلى كثير (Many-to-Many Relationships) علاقات واحد إلى واحد (One-to-One Relationships)
في علاقة واحد إلى واحد، يرتبط كل كائن من كائنين بحد أقصى بكائن واحد من الكائن الآخر، أي أن يكون لدى كل شخص بطاقة هوية واحدة، ولكن يمكن أن يكون لدى كل بطاقة هوية شخص واحد فقط.
لنفترض أن لدينا نموذجين: Person و IdentityCard، ونريد أن نربط كل شخص ببطاقة هوية واحدة فقط، وكل بطاقة هوية بشخص واحد فقط.
# models.py class Person(models.Model): name = models.CharField(max_length=255) identity_card = models.OneToOneField( 'IdentityCard', on_delete=models.CASCADE) class IdentityCard(models.Model): number = models.CharField(max_length=10) هنا نستخدم حقل OneToOneField لربط الكائنين. يُحدد الحقل on_delete ما يجب القيام به بالكائن المرتبط عندما يتم حذف الكائن الرئيسي، ونريد حذف الكائن المرتبط أيضًا، لذلك نستخدم on_delete=models.CASCADE.
علاقات واحد إلى كثير (One-to-Many Relationships)
تتيح لنا ربط كل كائن من كائن واحد بالعديد من الكائنات من كائن آخر، مثلاً لدى كل مدرس العديد من الطلاب، ولكن يمكن أن يكون لدى كل طالب مدرس واحد فقط.
ولنفترض أن لدينا نموذجين هما Teacher و Student، ونريد أن نربط كل مدرس بالعديد من الطلاب، وكل طالب بمدرس واحد فقط.
# models.py class Teacher(models.Model): name = models.CharField(max_length=255) students = models.ManyToManyField( 'Student', through='Enrollment') class Student(models.Model): name = models.CharField(max_length=255) نعتمد على حقل ManyToManyField لربط الكائنين، ويُستخدم حقل through لتحديد جدول وسيط يربط الكائنين هو Enrollment.
علاقات كثير إلى كثير (Many-to-Many Relationships)
يرتبط كل كائن من كائنين بالعديد من الكائنات من الكائن الآخر، مثل أن يكون لدى كل كتاب العديد من المؤلفين، ويمكن أن يكون لدى كل مؤلف العديد من الكتب.
ولنفترض أن لدينا نموذجين Book و Author، ونريد أن نربط كل كتاب بالعديد من المؤلفين، وكل مؤلف بالعديد من الكتب.
# models.py class Book(models.Model): title = models.CharField(max_length=255) authors = models.ManyToManyField( 'Author', through='BookAuthor') class Author(models.Model): name = models.CharField(max_length=255) لاحظ حقل ManyToManyField لربط الكائنين، ويُستخدم حقل through لتحديد جدول وسيط يربط الكائنين يسمى BookAuthor.
-
إجابة Mustafa Suleiman سؤال في مشكلة في كود بايثون كانت الإجابة المقبولة
ذلك يعني وجود خطأ في الكود، أرجو توفير الكود لمعرفة الخطأ
-
إجابة Mustafa Suleiman سؤال في سبب خطأ Module not found: Error: Can't resolve 'worker_threads' كانت الإجابة المقبولة
قم بحذف الاستيراد التالي من ملف index.js:
import { container } from 'webpack';
-
إجابة Mustafa Suleiman سؤال في مشكلة في رفع مشروع لارافيل على الانترنت كانت الإجابة المقبولة
بالطبع عليك تهيئة قاعدة البيانات لكن قبل ذلك عليك تغيير إصدار PHP إلى إصدار 8 من خلال الضغط على Advanced ثم PHP configuration ثم اختر 8.1 ثم Update.
ثم عليك تهيئة قاعدة البيانات بنفس البيانات الموجودة في ملف env لديك.
ومن المفترض أن يكون ملف .htaccess لديك كالتالي:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
-
إجابة Mustafa Suleiman سؤال في لا أستطيع الحصول على وظيفة بالشهادة المعتمدة التي تقدمها أكادمية حسوب في سن 11 سنة كانت الإجابة المقبولة
الأمر طبيعي لمن هم في سنك، فالوظيفة مرحلة مبكرة جدًا لعمرك، عليك التركيز حاليًا على تنمية مهاراتك وبناء شخصيتك بتأني وصبر فالعمر ما زال أمامك لكن لا تدع ذلك يخدعك فالسنين تمر بسرعة.
الشهادة معتمدة بالطبع لكن لا معنى لها بدون أن تكون مستوعب لما قمت بدراسته وقادر بالفعل على توظيفه وإنشاء مشاريع برمجية، وتتميز الشهادات في أكاديمية حسوب بكونها شهادة إنهاء وإجتياز للدورة حيث يتم إختبارك بشكل شفهي وعملي من خلال مشروع أيضًا وليس مجرد الحضور وإنهاء الدورة فقط.
وهناك فرصة أمامك في العمل الحر وستجد تفصيل هنا:
-
إجابة Mustafa Suleiman سؤال في هل يمكنني التعلم لغة بايثون في عمر 11 سنة كانت الإجابة المقبولة
بالطبع يمكنك ذلك، وأنت حاليًا في سن صغير مثالي وهو سن 11 عام الذي يعتبر السن المناسب لتعلم البرمجة في حال أردت ذلك فقبل ذلك الأمر معقد لتفهمه .
والحد الأدنى لتعلم البرمجة يختلف من شخص لآخر، وذلك يعتمد على مدى الاستعداد والقدرة على التعلم والتفاعل مع المواد التعليمية، ولكن الحد الأدنى الموصى به للبدء في تعلم البرمجة هو حوالي 8-10 سنوات، ويمكن للأطفال في هذا العمر أن يتعلموا البرمجة باستخدام لغات البرمجة المناسبة لهذا العمر مثل Scratch و Blockly وغيرها.
ولا تشغل بالك بموضوع الوظيفة أو العمل، بل ركز اهتمامك على تنمية مهاراتك والاستمتاع بتعلم البرمجة فأنت أمامك الوقت لكي تتعلم ما تريد وتجربة أي شيء، وإن التزمت حقًا ستصل لمستوى ممتاز جدًا في مرحلة مبكرة وستبدأ حياتك العملية مبكرًا أيضًا.
وستجد هنا نقاش مفصل:
-
إجابة Mustafa Suleiman سؤال في ماهي افضل طريقة في نظام Windows لتحديث Node.js إلى الإصدار الأحدث ؟ كانت الإجابة المقبولة
من الأفضل حذف نسخة Node.js القديمة تمامًا uninstall ثم تثبيت النسخة الجديدة والتي يمكنك تحميلها من هنا:
https://nodejs.org/en ودائمًا اختر النسخة المستقرة وهي LTS وهي إصدار 20 حاليًا.
لكن هناك طريقة أفضل والتي يستخدمها مطوري Node.js لكن البعض قد يجدها معقدة قليلاً، وهي استخدام مدير إصدارات وهو NVM بمعنى أنه يمكنك تحميل أكثر من إصدار لـ Node والتنقل بينهم بكل سهولة باستخدام أمر بسيط.
والأمر يتم كالتالي حذف أي إصدار Node.js لديك على حاسوبك من لوحة التحكم Control panel ثم تحميل وتثبيت NVM من:
https://github.com/coreybutler/nvm-windows/releases/download/1.1.12/nvm-setup.exe وبعد التثبيت قم بتنفيذ الأمر التالي في منفذ الأوامر:
nvm install lts وذلك من أجل تثبيت أحدث إصدار مستقر متوفر.
أو يمكنك تحميل إصدار معين من خلال:
nvm install 18 ثم قم بعرض الإصدارات الذي تم تثبيتها من خلال:
nvm ls ولتفعيل إصدار معين اكتب رقمه فقط كالتالي:
nvm use 18 والآن أنت على إصدار 18 وتستطيع التأكد من خلال:
node --version وإذا أردت التنقل إلى أي إصدار اكتب nvm use ورقم الإصدار بجانبه.
-
إجابة Mustafa Suleiman سؤال في مشكلة في كود JavaScript كانت الإجابة المقبولة
عليك أن تستخدم علامات الاقتباس (single or double quotes) للسلاسل النصية داخل دوال displayCart() و productContainer.innerHTML كالتالي:
productContainer.innerHTML += ` <div class="products"> <img src="image/remove.png"> <img src="image/${item.tag}.png"> </div> <div class="price">${item.price}</div> <div class="quantity"> <img src="image/plus.png"> <span>${item.inCart}</span> <img src="image/mins.png"> </div> <div class="price-total"> ${item.price * item.inCart} </div> `; productContainer.innerHTML += ` <div class="bask"> <h4 class="baskTitle"> baskTitle </h4> <h4 class="baskTotal"> ${cartCost} </h4> </div> `; أيضًا في دالة setItems(), يجب تصحيح هذا السطر:
localStorage.setItem("product.inCart", JSON.stringify(cartItems)); إلى:
localStorage.setItem("productsInCart", JSON.stringify(cartItems)); وفي دالة displayCart(), صحح هذا السطر:
let cartCost = document.querySelector('total'); إلى:
let cartCost = document.querySelector('.baskTotal');
-
إجابة Mustafa Suleiman سؤال في ما هي الـ package التي تحتوي على class Point2D في جافا ؟ كانت الإجابة المقبولة
الحزمة هي package java.awt.geom وتحتوي على class Point2D، وتلك هي الفئة الأساسية لجميع الكائنات التي تخزن إحداثيات ثنائية الأبعاد.
وتوفر الفئة مجموعة من الأساليب لمعالجة نقاط ثنائية الأبعاد، مثل حساب المسافة بين نقطتين وتحديد ما إذا كانت النقطة داخل شكل هندسي.
باستطاعتك أيضًا استخدام الفئة javafx.geometry.Point2D لتمثيل نقاط ثنائية الأبعاد، وتلك الفئة متشابهة مع الفئة java.awt.geom.Point2D، ولكنها توفر بعض الميزات الإضافية، مثل دعم تنسيقات النقاط المعقدة.
وإليك مثال على استعمال الفئة java.awt.geom.Point2D:
import java.awt.geom.Point2D; public class Point2DExample { public static void main(String[] args) { Point2D point1 = new Point2D.Double(10, 20); Point2D point2 = new Point2D.Double(30, 40); System.out.println("Distance between points: " + point1.distance(point2)); if (point1.contains(point2)) { System.out.println("Point 2 is inside point 1"); } else { System.out.println("Point 2 is not inside point 1"); } } } -
إجابة Mustafa Suleiman سؤال في بعد حصولي على الشهادة, كيف يمكنني العمل في الشركة على الانترنت ؟ كانت الإجابة المقبولة
في مواقع التوظيف مثل LinkedIn وIndeed وBayt ومنصة بعيد، وهناك مواقع أخرى.
-
إجابة Mustafa Suleiman سؤال في استفسار عن استعلامات قاعدة بيانات البريد الإلكتروني كانت الإجابة المقبولة
المطلوب هو التالي:
1- عرض صندوق الوارد الخاص بمستخدم (أحد أعضاء المجموعة)، ويجب أن يشمل ذلك كل من رسائل البريد الإلكتروني المباشرة ورسائل البريد الإلكتروني إلى مجموعاته.
ولعرض صندوق الوارد الخاص بمستخدم، ستحتاج إلى استعلام جدول Email وتصفية النتائج حسب عمود ReceiverID لتطابق معرف المستخدم، وستحتاج أيضًا إلى الانضمام إلى جدول UserGroup لتحديد المجموعات التي يكون المستخدم عضوًا فيها، ويمكن اعتبار أي رسائل بريد إلكتروني يتم إرسالها إلى مجموعة يكون المستخدم عضوًا فيها جزءًا من صندوق بريدهم.
2- عرض جميع رسائل البريد الإلكتروني المرسلة بواسطة مستخدم (أحد أعضاء المجموعة) مرتبة حسب تاريخ البريد الإلكتروني.
و ستحتاج إلى استعلام جدول Email وتصفية النتائج حسب عمود SenderID لتطابق معرف المستخدم، وتستطيع بعد ذلك فرز النتائج حسب عمود emailDate لترتيبها حسب التاريخ.
3- عرض جميع رسائل البريد الإلكتروني في مجموعة المستخدمين
استخدم هنا استعلام جدول Email والانضمام إلى جدول UserGroup لتحديد رسائل البريد الإلكتروني التي تم إرسالها إلى المجموعة، ثم تصفية النتائج حسب عمود GroupID لتطابق معرف المجموعة.
4- إضافة مستخدم إلى مجموعة
هنا عليك إدراج صف جديد في جدول UsersinGroup مع معرف المستخدم ومعرف المجموعة.
-
إجابة Mustafa Suleiman سؤال في هل يمكن توضيح المطلوب عمله ف الجداول؟ كانت الإجابة المقبولة
أعتقد أن المقصود هو جدول هو "EmailSenderReceiver" ونستخدم الأمر التالي لإنشاؤه:
CREATE TABLE EmailSenderReceiver ( emailID INT NOT NULL AUTO_INCREMENT, senderID INT NOT NULL, receiverID INT NOT NULL, subject VARCHAR(255) NOT NULL, body TEXT NOT NULL, sentDate DATETIME NOT NULL, PRIMARY KEY (emailID), FOREIGN KEY (senderID) REFERENCES Users (userID), FOREIGN KEY (receiverID) REFERENCES Users (userID) ); ,الأمر سينشئ جدولًا يسمى "EmailSenderReciver" بستة أعمدة:
emailID: رقم تعريف البريد الإلكتروني senderID: رقم تعريف المرسل receiverID: رقم تعريف المستلم subject: موضوع البريد الإلكتروني body: نص البريد الإلكتروني sentDate: تاريخ إرسال البريد الإلكتروني يحدد المفتاح الأساسي للجدول أن كل صف يجب أن يحتوي على قيمة فريدة لـ emailID. يحدد المفتاح الخارجي لـ senderID أن senderID يجب أن يكون قيمة موجودة في جدول UsersK ,يحدد المفتاح الخارجي لـ receiverID أن receiverID يجب أن يكون قيمة موجودة في جدول Users.