【问题标题】:It is possible to add a value at the end of mysql data?可以在mysql数据的末尾添加一个值吗?
【发布时间】:2013-09-18 22:41:53
【问题描述】:

所以,我有这张表,其中存储了一些用“,”分隔的数字。对我来说,像这样存储它们是可以的,因为当我回应它们时,我需要它们以这个确切的顺序。

有什么方法可以在现有数字的末尾添加一些数字?

这是表格:

id | mat_id     | note            |
-----------------------------------
1  | 1          | 1,2,3,4         |

我希望通过一个表格,能够在末尾添加一个数字,如下:

id | mat_id     | note            |
-----------------------------------
1  | 1          | 1,2,3,4,5       | 

我在 google 上没有找到任何关于此类的信息...这将非常有用。非常感谢!

【问题讨论】:

  • db 标准化,不要这样存储你的数据。你说它对你来说“没问题”,所以我想你知道你不应该这样做,然后你面临的问题就是你不应该这样做的原因
  • 我同意 Dagon - 相信我/我们;现在解决问题,否则以后的生活会比需要的更痛苦。
  • 好吧,如果数据对你来说是好的,请给我写一个查询,它可以计算 id = 1 的笔记数量,你有 5 分钟的时间来写那个查询......(真实的问题/示例总是有效的最好)
  • 如果您需要这个时间sqlfiddle.com/#!2/5282d/2这里是。
  • 抱歉,网络连接失败。好的,所以我了解这些问题。然后另一个问题出现了。我有一个现在已经可以使用的代码。它与表中的值相呼应。如果我用不同的 id 存储“note”,在跳转到下一个“mat_id”之前,有没有办法让我用逗号分隔它们?我应该发布另一个问题吗?谢谢大家!

标签: php mysql sql forms


【解决方案1】:

在列中存储逗号分隔值通常不是一个好主意。但是如果你实在无法改变你的数据库结构,你可以使用CONCAT_WS:

UPDATE tableName
SET note = CONCAT_WS(',', note, '5')

如果已经有一些数据,这将在注释后自动插入一个逗号,否则它只会添加字符串'5':

SELECT CONCAT_WS(',', '1,2,3,4', '5');
1,2,3,4,5

SELECT CONCAT_WS(',', NULL, '5');
5

当然,你需要确保你没有使用空字符串,否则会失败:

SELECT CONCAT_WS(',', '', '5');
,5

否则会使查询复杂一点:

UPDATE tableName
SET note = CONCAT_WS(',', CASE WHEN note<>'' THEN note END, '5')

【讨论】:

  • 好一点,但要注意警告。不过仍然不是我所说的理想。
  • 那个空字符串 gotcha 真的不好 - 如果解决它会使查询变得更加复杂,我猜。
  • 我觉得有些问题不应该回答,因为原来的方法只是“错误”;但那只是我
  • @Dagon 是的,方法不正确......我认为最好在答案中指定,我已经更新了它,tnx
  • 谢谢大家!我决定不使用这个。但是我遇到了另一个问题(我在有问题的 cmets 中解释了它)
【解决方案2】:
UPDATE table SET note= CONCAT(note, ',5') WHERE id = 1

【讨论】:

  • 这很容易出错。原始代码将结果保留为1,2,3,45。一点都不好 - 需要额外的检查/修补才能使现有值在某种程度上保持一致。 (因此,虽然它会在这里“工作”,但它非常敏感,仍然不能代表“布局良好”的信息。)
猜你喜欢
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多