我希望与此处列出的解决方案相反:
MySQL Insert row, on duplicate: add suffix and re-insert
by:https://stackoverflow.com/users/296452/andreas-wederbrand
我想将后缀附加到表格中较旧的(现有)值。
因此我会得到这个结果:
如果我再次尝试插入dude,触发器将检查它是否存在,然后将下一个可用的(在这种情况下为-3)附加到现有的,并插入最新的dude而没有后缀:
这可能吗?
提前致谢。 克里斯
答案 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;
<强>输出:强>
在这里演示: