رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Join بین چند جدول
#1
من یچند تا جدول دارم  که میخوام join بزنم و مقداریرو بخونم  
یکی از جدولها ممکنه مقداری نداشته باشه  و به همین علت کوئری هیچ نتیجه ای بر نمیگردونه
از چجور join  باید استفاده کنم که این موضوع رفع بشه

این کوئریمه


SELECT 
tpc.id           AS tpcId, 
tpc.user_id      AS tpcuser_id, 
tpc.departman_id AS tpcdepartman_id, 
tpc.periority_id AS tpcperiority_id, 
tpc.situation_id AS tpcsituation_id, 
tpc.file         AS tpcfile, 
tpc.create_date  AS tpcreate_date, 
tpc.title        AS tpctitle, 
tpc.body         AS tpcBody,
tpc.follow_code  AS tpcfollow_code,
user.id          AS userId, 
user.fname       AS userfname, 
user.lname       AS userlname, 
dpt.id           AS dptId, 
dpt.title        AS dpttitle,
prt.id           AS prtId,
prt.name         AS prtname,
stu.id           AS stuid,
stu.title        AS stutitle,
               fac.id           AS facId,
               fac.topic_id     AS factopic_id,
               fac.price        AS facPrice                
               fac.status       AS facStatus                
FROM topic tpc
LEFT OUTER JOIN users user
ON tpc.user_id = user.id
LEFT OUTER JOIN ticket_departman dpt 
ON tpc.departman_id = dpt.id 
LEFT OUTER JOIN periority prt 
ON prt.id = tpc.periority_id
LEFT OUTER JOIN situation stu 
ON tpc.situation_id = stu.id
               LEFT INNER JOIN factor fac
               ON tpc.id = fac.topic_id
WHERE(tpc.id = $topicId AND fac.topic_id = $topicId); 
");






   

   
پاسخ
تشکر شده توسط:
#2
برای آخری RIGHT JOIN بزنید ببینید درست میشه؟ ضمناً علت اینکه از INNER استفاده کردین چی بوده؟
پاسخ
تشکر شده توسط: sm_pakdel
#3
نشد
اونم برای این بود ه داشتم تست میکردم همه مدل های JOINO
پاسخ
تشکر شده توسط:
#4
این تاپیکیه که کاربر میزنه و مدیر باید تعیین قیمت کنه برای تاپیک که کاربر هم ببینه و اگر خواست پرداخت کنه
من میخوام وقتی مدیر تاپیکی رو باز میکنه اگر تعیین قیمت شده بود که قیمت رو ببینه و اگر نشده بود تعیین قیمت کنه
JOIn میزنم و تمام اطلاعات رو میگیرم اما وقتی تاپیکی تعیین قیمت نشده باشه مقداری تو جدول فاکتور براش نیست
در نتیجه کلا کوئری بی نتیجه میشه و بقیه موارد تاپیک هم نمایش داده نمیشه
پاسخ
تشکر شده توسط:
#5
اگر فاکتوری صادر شده باشه نتیجه درسته با این کوئری
اما اگر فاکتوری صادر نشده باشه کلا هیچی بر نمیگردونه


SELECT 
		tpc.id           AS tpcId, 
		tpc.user_id      AS tpcuser_id, 
		tpc.departman_id AS tpcdepartman_id, 
		tpc.periority_id AS tpcperiority_id, 
		tpc.situation_id AS tpcsituation_id, 
		tpc.file         AS tpcfile, 
		tpc.create_date  AS tpcreate_date, 
		tpc.title        AS tpctitle, 
		tpc.body         AS tpcBody,
		tpc.follow_code  AS tpcfollow_code,
		user.id          AS userId, 	
		user.fname       AS userfname, 	
		user.lname       AS userlname, 	
		dpt.id           AS dptId, 
		dpt.title        AS dpttitle,
		prt.id           AS prtId,
		prt.name         AS prtname,
		stu.id           AS stuid,
		stu.title        AS stutitle,
                fac.id           AS facId,
                fac.topic_id     AS factopic_id,
                fac.price        AS facPrice,                
                fac.status       AS facStatus
                FROM topic tpc
		LEFT OUTER JOIN users user
		ON tpc.user_id = user.id
		LEFT OUTER JOIN ticket_departman dpt 
		ON tpc.departman_id = dpt.id 		
		LEFT OUTER JOIN periority prt 
		ON prt.id = tpc.periority_id
		LEFT OUTER JOIN situation stu 
		ON tpc.situation_id = stu.id
                LEFT OUTER JOIN factor fac
                ON fac.topic_id = tpc.id
		WHERE(tpc.id = 20 )



با این کوئری درست شد
و اگر مقداری در جدول آخر نباشه مقادیر اونو NUll برمیگردونه

این بخش از کد
ON tpc.id = fac.topic_id
با ید به این شکل اصلاح میشد

ON fac.topic_id = tpc.id
پاسخ
تشکر شده توسط:
#6
کلاً همیشه توی ارتباط LEFT JOIN و RIGHT JOIN بسته به اینکه از چپ جوین میزنید یا راست، کلید خارجی رو هم همونطرف باید بنویسید.
پاسخ
تشکر شده توسط: sm_pakdel




کاربران در حال بازدید این موضوع: 1 مهمان