Mysql запрос (LINK билеты, сотрудник, кошки, комментарии) с помощью JOIN - PullRequest
1 голос
/ 15 ноября 2011

вот мои столы

Билеты

 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

iхочу получить последний комментарий -> 2 результата имеют тот же последний комментарий

Как я могу сделать этот запрос без этих 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 Ответ

2 голосов
/ 15 ноября 2011

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...