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

السؤال

نشر

أتوفر على جدولين على قاعدة بيانات من نوع Mysql، الأول tbl_reaction بالشكل التالي:

╔════╦═══════════╦════════════╦═════════╗
║ id ║ condition ║ phenomenon ║  infor  ║
╠════╬═══════════╬════════════╬═════════╣
║  1 ║ abcd123   ║ abcd123    ║ abcd123 ║
║  2 ║ wer       ║ wer        ║ wer     ║
╚════╩═══════════╩════════════╩═════════╝

الجدول الثاني tbl_reaction_item:

╔══════╦═══════════╦═════════╦═════╗
║ reid ║ substance ║  type   ║ num ║
╠══════╬═══════════╬═════════╬═════╣
║    1 ║ H2        ║ income  ║   2 ║
║    1 ║ O2        ║ income  ║   1 ║
║    1 ║ H2O       ║ outcome ║   2 ║
╚══════╩═══════════╩═════════╩═════╝

ما أريده هو كيفية استعمال لغة البرمجة php للحصول على النتيجة التالية:

2H2 + O2 => 2H2O

كيف ذلك؟

Recommended Posts

  • 1
نشر

الطريقة التي سننهجا للوصول إلى نتيجة المعادلة الكيميائية هي:

(income + income => outcome) H2 + O2 => H2O

أي أن جملة الاستعلام ستكون على الشكل:

SELECT CONCAT(GROUP_CONCAT(CASE WHEN type='income' THEN CONCAT(IF(num=1, '', num),substance) END SEPARATOR ' + '), ' => ',
             GROUP_CONCAT(CASE WHEN type='outcome' THEN CONCAT(IF(num=1, '', num),substance) END SEPARATOR ' + '))
             AS reaction
FROM tbl_reaction_item
GROUP BY reid;

تم استعمال GROUP By للتجميع الحقول حسب حقل معيّن.

النتيجة النهائية للمعادلة:

╔══════════════════╗
║     reaction     ║
╠══════════════════╣
║ 2H2 + O2 => 2H2O ║
╚══════════════════╝

استخدمنا:

  •  GROUP_CONCAT مع علامة + للحصول على الشكل العلمي لكتابة المعادلة.
  • CONCAT للحصول على الرمز <=.
╔══════╦═══════════╦═════════╦═════╦══════╗
║ reid ║ substance ║  type   ║ num ║ pos  ║
╠══════╬═══════════╬═════════╬═════╬══════╣
║    1 ║ H2        ║ income  ║   2 ║   1  ║       
║    1 ║ O2        ║ income  ║   1 ║   2  ║     
║    1 ║ H2O       ║ outcome ║   2 ║   1  ║
╚══════╩═══════════╩═════════╩═════╩══════╝

 

النتيجة النهائية:

╔═════╦════════════╦═════════════╦══════════╦══════════════════╗
║ id  ║ condition  ║ phenomenon  ║  infor   ║     reaction     ║
╠═════╬════════════╬═════════════╬══════════╬══════════════════╣
║  1  ║ abcd123    ║ abcd123     ║ abcd123  ║ 2H2 + O2 => 2H2O ║
║  2  ║ wer        ║ wer         ║ wer      ║ (null)           ║
╚═════╩════════════╩═════════════╩══════════╩══════════════════╝

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...