في عمليات استعلام قواعد البيانات MySQL، يمكنك الجمع بين بيانات من جداول متعددة باستخدام عبارات JOIN. في حالتك، تحتاج إلى استخدام عبارة JOIN لربط جدول ARTICLE مع ARTICLE_has_TAG، TAG، POST_ARTICLE، و USER. يمكن القيام بذلك من خلال استخدام العلاقات الرئيسية بين هذه الجداول.
للحصول على جميع البيانات التي تحتاجها، يمكنك استخدام الاستعلام التالي:
sqlSELECT
ARTICLE.ID_ARTICLE,
ARTICLE.TITLE_ARTICLE,
ARTICLE.SUBTITLE_ARTICLE,
ARTICLE.REFEREE_ARTICLE,
ARTICLE.LINEUP_ARTICLE,
ARTICLE.LINEUP_OPPONENT_ARTICLE,
ARTICLE.CARD_ARTICLE,
ARTICLE.CARD_OPPONENT_ARTICLE,
ARTICLE.CHANGE_ARTICLE,
ARTICLE.CHANGE_OPPONENT_ARTICLE,
ARTICLE.GOALS_ARTICLE,
ARTICLE.CONTENT_ARTICLE,
ARTICLE.CREATED_ARTICLE,
ARTICLE.IMAGE_ARTICLE,
ARTICLE.MATCH_ID,
ARTICLE.USER_ID,
TAG.NAME_TAG,
COUNT(DISTINCT POST_ARTICLE.ID_POST_ARTICLE) AS COMMENT_COUNT,
USER.USERNAME_USER
FROM ARTICLE
JOIN ARTICLE_has_TAG ON ARTICLE.ID_ARTICLE = ARTICLE_has_TAG.ARTICLE_ID
JOIN TAG ON ARTICLE_has_TAG.TAG_ID = TAG.ID_TAG
LEFT JOIN POST_ARTICLE ON ARTICLE.ID_ARTICLE = POST_ARTICLE.ARTICLE_ID
JOIN USER ON ARTICLE.USER_ID = USER.ID_USER
GROUP BY ARTICLE.ID_ARTICLE;
هذا الاستعلام يقوم بربط جدول ARTICLE بجدول ARTICLE_has_TAG و TAG باستخدام JOIN، ويستخدم LEFT JOIN لربط جدول POST_ARTICLE. يتم استخدام GROUP BY لتجميع البيانات حسب ID_ARTICLE.
بالتفصيل، يتم اختيار الحقول من ARTICLE و USER، واسم الوسم (TAG)، وعدد التعليقات (COMMENT_COUNT) باستخدام COUNT و DISTINCT لتجنب الاحتساب المزدوج للتعليقات في حال وجود أكثر من تعليق لنفس المقال.
يمكنك تكييف هذا الاستعلام وفقًا لاحتياجاتك الدقيقة، ويمكنك استخدامه كأساس لاستعلامات أكثر تعقيدا حسب متطلبات مشروعك.
المزيد من المعلومات
بالطبع، يمكننا التوسع أكثر في تفسير الاستعلام وتوضيح بعض النقاط الإضافية. في الاستعلام السابق، قمنا بتضمين معلومات هامة حول المقالات، الوسوم، والتعليقات. دعنا نلقي نظرة عميقة على بعض العناصر المهمة في الاستعلام:
-
استخدام JOIN:
- في الجزء الأول من الاستعلام، قمنا بعمل JOIN بين جدولي ARTICLE و ARTICLE_has_TAG باستخدام
JOIN ARTICLE_has_TAG ON ARTICLE.ID_ARTICLE = ARTICLE_has_TAG.ARTICLE_ID
. هذا يربط كل مقالة بالوسوم المرتبطة بها. - ثم قمنا بعمل JOIN مع جدول TAG باستخدام
JOIN TAG ON ARTICLE_has_TAG.TAG_ID = TAG.ID_TAG
. هذا يتيح لنا الوصول إلى أسماء الوسوم المرتبطة بكل مقالة.
- في الجزء الأول من الاستعلام، قمنا بعمل JOIN بين جدولي ARTICLE و ARTICLE_has_TAG باستخدام
-
COUNT و DISTINCT:
- استخدمنا
COUNT(DISTINCT POST_ARTICLE.ID_POST_ARTICLE)
لحساب عدد التعليقات لكل مقالة.DISTINCT
يضمن أننا لا نحسب التعليقات المكررة، وهو خاصة مهم عند القيام بعمليات JOIN.
- استخدمنا
-
LEFT JOIN:
- قمنا باستخدام
LEFT JOIN
عند الربط مع جدول POST_ARTICLE. هذا يعني أنه حتى إذا لم تكن هناك تعليقات للمقالة، سيظهر السطر في النتيجة وسيكون لديناCOMMENT_COUNT
مع قيمة 0.
- قمنا باستخدام
-
GROUP BY:
- استخدمنا
GROUP BY ARTICLE.ID_ARTICLE
لتجميع البيانات حسب معرف المقالة. هذا يتيح لنا عرض معلومات فريدة لكل مقالة.
- استخدمنا
-
تحسين القراءة:
- قمنا بتجميع الحقول المختلفة لتحسين قراءة الاستعلام. هذا يجعل النتائج أكثر وضوحًا ويسهل فهمها.
تذكير: قبل تنفيذ أي استعلام على قاعدة البيانات الحية، يجب دائمًا اختباره على بيانات افتراضية أو نسخة اختبار لتجنب أي تأثير على البيانات الحية.