2017-07-26 47 views
0

我希望做的解決方案在這裏列出的對面:MySQL的插入行,在重複:添加後綴,舊的(現有的)值,然後重新插入

MySQL Insert row, on duplicate: add suffix and re-insert

由:https://stackoverflow.com/users/296452/andreas-wederbrand

我想將後綴追加到表中較舊(現有)的值。

因此,我會產生這樣的結果:

enter image description here

如果我嘗試再次插入花花公子,觸發將檢查它是否存在,然後附加的下一個可用(-3在這種情況下),以現有一個,然後將最新的傢伙沒有後綴:

enter image description here

這可能嗎?

在此先感謝。 Chris

回答

0

MySQL中的觸發器無法在導致它觸發的表上作用,因此您的計劃將無法工作,至少不像您所描述的那樣。你所要求的將會是非常困難的,如果不是不可能的話,並且可能最終成爲維護噩夢。實際上我沒有看到任何要爲版本標記slug值的意見。我可以提供一種解決方法,即只在您查詢時構建版本後綴。這是相當無痛的,並且可以讓你擺脫惡劣的桌面設計。事情是這樣的:

SET @rank = 0; 
SET @slug = NULL; 

SELECT 
    t1.id, 
    CASE WHEN t2.id IS NULL 
     THEN CONCAT(t1.slug, '-', CAST(t1.label AS CHAR(50))) 
     ELSE t1.slug END AS slug 
FROM 
(
    SELECT 
     id, 
     @rank:=CASE WHEN @slug = slug THEN @rank + 1 ELSE 1 END AS label, 
     @slug:=slug AS slug 
    FROM yourTable 
    ORDER BY slug, id 
) t1 
LEFT JOIN 
(
    SELECT slug, MAX(id) AS id 
    FROM yourTable 
    GROUP BY slug 
) t2 
    ON t1.id = t2.id AND 
     t1.slug = t2.slug; 

輸出:

enter image description here

演示在這裏:

Rextester

+0

我不應該mentionned ID列,我希望所有這要依靠1個子彈柱 – PAPADOC

+0

@PAPADOC如果沒有'id'列,你的問題就沒有意義了,因爲你需要一個列來提供排序。我花了整個午休時間寫作和測試這個查詢,我不再做任何事情。祝你好運。 –

+0

我感謝蒂姆,我會繼續努力。 – PAPADOC