2011-11-15 16 views
1

這裏是我的表MySQL查詢(LINK門票,員工,貓,評論)使用JOIN

門票

tic_id,  
tic_cat  
tic_priority 
tic_cus  
tic_date  
tic_title  
tic_msg  
tic_files  
tic_emp  
tic_moved  
tic_statue 
tic_rate  

員工

emp_id  
emp_name  
emp_username 
emp_password 
emp_cat  
emp_special 
emp_lastlogin 
emp_session 
emp_code  
emp_statue 
emp_master 
emp_ip  

cat_id  
cat_type  
cat_name  
cat_statue 
cat_delete 
cat_date  
cat_ip  
cat_options 

評論

com_id  
    tic_id  
    cus_id  
    emp_id  
    com_msg  
    com_time 
    com_ip  
    com_statue 

而我需要的結果作爲

tic_id | tic_cat | cat_name | tic_title | tic_statue | tic_priority | tic_msg | emp_name | comments_row | last_comment | 

我有這樣的查詢,但我有2個問題

查詢

SELECT 
     tickets.tic_id 
     ,tickets.tic_cat 
     ,cats.cat_name 
     ,tickets.tic_title 
     ,tic_statue 
     ,tic_priority 
     ,tickets.tic_msg 
     ,employee.emp_name 
     ,count(comments.com_id) 
     ,(SELECT comments.com_msg 
      from comments 
       order by com_id DESC limit 1) 
      AS last_comment 
     FROM tickets 
     LEFT JOIN employee 
        on (tickets.tic_emp = employee.emp_id) 
     LEFT join cats 
        on (tickets.tic_cat = cats.cat_id) 
     LEFT JOIN comments 
        on(tickets.tic_id = comments.tic_id) 

    WHERE tic_cus=2 /* 2 -> This Is Customer Id */ 
    GROUP BY comments.tic_id 

我的問題,是

我有3個導致數據庫以客戶號2 - >只顯示2個結果

我想最後的評論 - > 2的結果具有相同的最後一個註釋

如何我能做到這一點查詢帶有OUT這2個錯誤

編輯帖子後新建查詢

問題二號解決使用這曲兒Ÿ

SELECT 
     tickets.tic_id 
     ,tickets.tic_cat 
     ,cats.cat_name 
     ,tickets.tic_title 
     ,tic_statue 
     ,tic_priority 
     ,tickets.tic_msg 
     ,employee.emp_name 
     ,count(comments.com_id) 
     ,(SELECT comments.com_msg 
      from comments 
       WHERE tickets.tic_id = comments.tic_id 
       order by com_id DESC limit 1) 
      AS last_comment 
     FROM tickets 
     LEFT JOIN employee 
        on (tickets.tic_emp = employee.emp_id) 
     LEFT join cats 
        on (tickets.tic_cat = cats.cat_id) 
     LEFT JOIN comments 
        on(tickets.tic_id = comments.tic_id) 

    WHERE tic_cus=2 
    GROUP BY comments.tic_id 

解決

SELECT 
     tickets.tic_id 
     ,tickets.tic_cat 
     ,cats.cat_name 
     ,tickets.tic_title 
     ,tic_statue 
     ,tic_priority 
     ,tickets.tic_msg 
     ,employee.emp_name 
     ,count(comments.com_id) 
     ,(SELECT comments.com_msg 
      from comments 
       WHERE tickets.tic_id = comments.tic_id 
       order by com_id DESC limit 1) 
      AS last_comment 
     FROM tickets 
     LEFT JOIN employee 
        on (tickets.tic_emp = employee.emp_id) 
     LEFT join cats 
        on (tickets.tic_cat = cats.cat_id) 
     LEFT JOIN comments 
        on(tickets.tic_id = comments.tic_id) 

    WHERE tic_cus=2 
    GROUP BY tickets.tic_id 
+1

@Gordon:請注意,您刪除內容OP與上次編輯。 – mellamokb

+0

@mellamokb是的,我可能在OP編輯之前查看了第一個版本,感謝您閱讀它。 – Gordon

回答

2

1)你能告訴這些表中的一些數據來證明?換句話說,你怎麼知道你應該有三條記錄? select * from tickets where tic_cus = 2本身是否返回3條記錄?

2)您需要按票據過濾評論子查詢。我也建議有以及在子查詢的評論數和乾脆離開了GROUP BY

,(select count(comments.com_id) 
    from comments 
    where comments.tic_id = tickets.tic_id) as comment_count 

,(select comments.com_msg 
    from comments 
    where comments.tic_id = tickets.tic_id 
      ^^^^^^^ filter by ticket so not last of ALL comments 
order by com_id DESC limit 1) as last_comment 
+0

謝謝@mellamokb,問題解決了,看到我的帖子後編輯:) –

+0

您的查詢幫助我找到問題我是羣組comment_row但我應該組ticket_tic_id :) –