0

我有一个表任务,表中有一个外键,注释。

+-------------+   +-----------+
|Task         |   |Comment    |
+-------------+   +-----------+
|t_id (PK)    |   |c_id (PK)  |
|t_title      |   |c_task (FK)|
|t_description|   |c_comment  |
|t_state      |   |c_date     |
+-------------+   +-----------+

我需要获取所有任务,以及最后评论的日期(如果有的话),并且我需要知道按什么顺序订购或消除具有特定状态的记录。都在同一个程序中。我现在的问题是,如果我尝试这样做,我只会收到附有评论的任务。如果任务没有附加评论,则不会显示。

create procedure getalltask(state boolean,  orderby varchar(30))
begin
IF state = true then
   select 
      t_id,  
      t_title, 
      t_description, 
      t_state,
      DATE_FORMAT(c_date, '%e/%c %H:%i') as c_datetime
   from task, comment
   where task.t_state = orderBy
      and task.t_id = comment.c_task
      and c_date IN 
   (
   select MAX(c_date) 
   from comment 
   where task.t_id = comment.c_task
      and MAX(c_id)
   )

ELSE
   select 
      t_id, 
      t_title, 
      t_description, 
      t_state, 
      DATE_FORMAT(c_date, '%e/%c %H:%i') as c_datetime,
      @nextid := DATE_FORMAT(c_date, '%e/%c %H:%i'),
      c_date
   from task, comment
      and task.t_id = taskcomment.c_task
      and c_date IN 
   (
   select MAX(c_date) 
   from comment 
   where task.t_id = comment.c_task
   )
   order by orderby
end if;
end$$

我尝试过嵌套 if,但这似乎不起作用,而且我在内部的存储过程和函数方面也遇到了问题,但也许你有一些想法、建议和解决方案?

4

1 回答 1

0

您的 sql 语句正在执行内部连接,您应该在任务和评论表之间执行左连接,如果有评论,它将带回所有带有评论的任务 iro,这意味着没有评论的任务将具有空白/可为空的值。

于 2015-11-03T20:31:55.187 回答