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

دمج جدولين حسب شرط في استعلام mysql

محمد المصري12

السؤال

الان لنفرض عندي جدول اسمه capson به حقلين احدهما اسمه top و الاخر down 

و هما يرمزان للخامة الخاصة بالكبسون و بهما ارقام ، هذه الارقام من المفترض ان نتوجه الى جدول آخر لمقارنتها به و من ثم احضار الاسماء الخاصة بهذه الخامات من هذا الجدول 

 

انا عملت الاستعلام كالتالي ، لكن للاسف غلط ، 

 

SELECT *,

x.name AS aname,

SUBSTRING(s.username, 1, 25) AS suppname,

f.name AS fname 

FROM order_capsons o 
   
LEFT JOIN suppliersdb s ON s.id = o.factory
  
JOIN capson x ON o.capson_id = x.id

INNER JOIN fibers f
    
ON ( x.top AND x.down = f.id )

WHERE order_id=".$order['id'].";

لما بطبع نتيجة fname تظهر معي الاسم المطابق للرقم الموجود في x.down فقط 

انا عاوزه يقارن الرقم اللي موجود في x.top بال id الخاص بجدول الخامات fiber.id و يطبعلي الاسم المطابق

و في نفس الوقت يقارن الرقم اللي موجود في x.down بنفس جدول الخامات fiber.id و يطلعلي النتيجة المطابقة

هل من سبيل 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 7 دقائق مضت قال محمد المصري5:

SELECT *,

x.name AS aname,
       
SUBSTRING(s.username, 1, 25) AS suppname,
       
f.name AS fname

FROM order_capsons oc
   
LEFT JOIN suppliersdb s ON s.id = oc.factory
  
LEFT JOIN capson x ON oc.capson_id = x.id

LEFT JOIN fibers f
    
ON ( x.top = f.id OR x.down = f.id )

WHERE order_id=".$order['id'].";";

نفس الشئ استاذي ، عند طباعة fname يخرج الاسم المقابل لل x.top و يتجاهل تماما x.down

حاول تسبيق شرط الدمج الخاص ب fiber للسطر السابق، ربما تعمل فلترة مسبقة للقيم التي تطلبها.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 3 ساعات قال محمد المصري5:

SELECT *,

x.name AS aname,
       
SUBSTRING(s.username, 1, 25) AS suppname,
       
f.name AS fname

FROM order_capsons oc
   
LEFT JOIN suppliersdb s ON s.id = oc.factory
  
LEFT JOIN capson x ON oc.capson_id = x.id

LEFT JOIN fibers f
    
ON ( x.top = f.id OR x.down = f.id )

WHERE order_id=".$order['id'].";";

نفس الشئ استاذي ، عند طباعة fname يخرج الاسم المقابل لل x.top و يتجاهل تماما x.down

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Wael Aljamal:

جرب تبديل inner join ب left join و هنا left JOIN capson x

SELECT *,

x.name AS aname,
       
SUBSTRING(s.username, 1, 25) AS suppname,
       
f.name AS fname

FROM order_capsons oc
   
LEFT JOIN suppliersdb s ON s.id = oc.factory
  
LEFT JOIN capson x ON oc.capson_id = x.id

LEFT JOIN fibers f
    
ON ( x.top = f.id OR x.down = f.id )

WHERE order_id=".$order['id'].";";

نفس الشئ استاذي ، عند طباعة fname يخرج الاسم المقابل لل x.top و يتجاهل تماما x.down

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

جربت اغير الترتيب  نفس الشئ

جه في راسي اكرر الدمج و اغير شرط ON في كل مرة مع اعطاء اسم مختلف للجدول في كل دمج

LEFT OUTER JOIN fibers top ON x.top = top.id

LEFT OUTER JOIN fibers down ON x.down = down.id 

جايز اكون بخرف لكن الحقيقة انها اشتغلت كده و طلعت الناتج صح :D

مش عارف اعتمد الاستعلام كده و خلاص و لا الطريقة غلط

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 15 ساعات قال محمد المصري5:

جربت اغير الترتيب  نفس الشئ

جه في راسي اكرر الدمج و اغير شرط ON في كل مرة مع اعطاء اسم مختلف للجدول في كل دمج


LEFT OUTER JOIN fibers top ON x.top = top.id

LEFT OUTER JOIN fibers down ON x.down = down.id 

جايز اكون بخرف لكن الحقيقة انها اشتغلت كده و طلعت الناتج صح :D

مش عارف اعتمد الاستعلام كده و خلاص و لا الطريقة غلط

 

ألم بحدث تكرار في النتائج؟

يمكن فصل الاستعلام لاستعلامين جزئيين، ودمج نتاىجهما باستخدام Union .. 

أو استخدم المعامل IN مثل 

ON F.ID IN (X.TOP, X.DOWN)

وحل آخر هو نقل الشرط لعبارة where

أرجو تجريب هذه الأفكار، وطرح نتيجة تطبيقهم،

شكرا لك

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 21 ساعات قال Wael Aljamal:

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

نفس الشئ ، الله المستعان ، تعبتك معايا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال محمد المصري5:

نفس الشئ ، الله المستعان ، تعبتك معايا

هل جربت أيضا هذه

بتاريخ 22 ساعات قال Wael Aljamal:

ألم بحدث تكرار في النتائج؟

يمكن فصل الاستعلام لاستعلامين جزئيين، ودمج نتاىجهما باستخدام Union .. 

أو استخدم المعامل IN مثل 


ON F.ID IN (X.TOP, X.DOWN)

وحل آخر هو نقل الشرط لعبارة where

أرجو تجريب هذه الأفكار، وطرح نتيجة تطبيقهم،

شكرا لك

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...