MySQL插入行,重复:将后缀添加到旧(现有)值并重新插入

时间:2017-07-26 05:51:24

标签: php mysqli triggers unique

我希望与此处列出的解决方案相反:

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

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

我想将后缀附加到表格中较旧的(现有)值。

因此我会得到这个结果:

enter image description here

如果我再次尝试插入dude,触发器将检查它是否存在,然后将下一个可用的(在这种情况下为-3)附加到现有的,并插入最新的dude而没有后缀:

enter image description here

这可能吗?

提前致谢。 克里斯

1 个答案:

答案 0 :(得分: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