2014-04-29 39 views
0

我有這個查詢正在工作,直到我意識到如果表爲空,max不起作用。我檢查一個用戶的position,然後插入一個位置更高的行。我如何設置一個案例,如果沒有適當的user_id的行,我插入一個位置爲1的行?我試圖做一個case語句,但它不起作用,我淹沒在Mysql語法中。具有集合函數的Mysql case語句(僅在集合函數使用時才使用集合)

以下是原始

$stmt = $dbh->prepare(" 
    insert into 
     dashboard_data 
    (position, user_id) 
     select 
      max(position) + 1, 
      :userid 
     from 
      dashboard_data 
     where 
      user_id = :userid 
"); 

這裏是我在一個case語句誤導嘗試

insert into 
     dashboard_data 
    (position, user_id) 
     select 
      case 
       when exists 
        max(position) 
       then 
        max(position) + 1 
       else 
        1 
      end case, 
      :userid 
     from 
      dashboard_data 
     where 
      user_id = :userid 

回答

2

使用coalesce()

insert into dashboard_data(position, user_id) 
    select coalesce(max(position), 0) + 1, 
      :userid 
    from dashboard_data 
    where user_id = :userid; 
+0

+1,我已經使用@ marshall的答案,但它的工作。 –

+0

@CraigPatrickLafferty如果您有一系列可能的NULL值,那麼Coalesce會更好,否則它們的操作方式相似。 https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce –

+0

我同意,但我碰巧只有一個可能的值。我將來一定會使用它。 –