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

این کوئریمه

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
اگر فاکتوری صادر شده باشه نتیجه درسته با این کوئری
اما اگر فاکتوری صادر نشده باشه کلا هیچی بر نمیگردونه

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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 مهمان