【问题标题】:how can I add a value to the current with SQL UPDATE如何使用 SQL UPDATE 向当前值添加值
【发布时间】:2014-02-24 13:31:50
【问题描述】:

我正在我的网站上创建访问日志,因为每当有人进入该网站时,他都会在数据库的同一注册表中设置日期和时间。但是,他没有删除上次访问,而是添加了另一个。示例:

这是当前值:2014-01-31 17:18:27

这是新值:2014-02-01 17:18:27

如果我使用 UPDATE 方法,它会将当前值替换为新值。 我想留下如下:2014-01-31 17:18:27, 2014-02-01 17:18:27

让我们更接近我正在做的事情。

这是我正在创建的函数:

function functionInd() {
    $this = 'this';
    $conn = db();
    $prepare = $conn->prepare('
    UPDATE table
    SET dates=:date
    WHERE this=:this');
    $prepare->bindParam(':date',date("Y-m-d H:i:s"));
    $prepare->bindParam(':this', $this, PDO::PARAM_STR);
    $prepare->execute();
    disconnectBase($conn);
}

我需要做什么?

【问题讨论】:

  • 你使用的是什么 SQL 引擎?
  • @GordonLinoff 你能回答吗?

标签: sql pdo sql-update


【解决方案1】:

你不想这样做。在 SQL 中存储列表不是使用数据库的正确方法。您需要一个将日期存储在单独表中的表,每个 this 每个 date 一行。如果你有这样的表,你的代码会很简单:

insert into ThisDateTable(this, date)
    select :this, :date;

也就是说,如果您仍然坚持在字段中存储列表 - 以及这将导致您的所有后续延迟和问题 - 语法是以下之一:

set date = concat(date, ',' :date)

set date = date || ',' || :date

set date = date + ',' + :date

set date = date & "," & :date

第一个使用 ANSI 标准函数,并受 MySQL、Oracle、SQL Server 2012、Postgres、DB2 和 Teradata(可能还有其他)支持。

第二个使用 ANSI 标准运算符,并受到多个数据库的支持,尤其是 Oracle 和 Postgres(可能还有其他)。

第三种是“t-sql”格式,供SQL Server(所有版本)和Sybase使用。

第四个是Access使用的,高度非标准,无论是使用&还是使用"分隔字符串。

【讨论】:

  • 即使它每天管理 1,000~250,000 条(并不夸张)新记录。是创建新表最合适的方式吗?
  • @Deharlan 。 . .是的,有一张单独的桌子是正确的方法。如果您正在收集大量数据,那么拥有正确的数据结构只会对未来的数据库有所帮助。
  • 那会以某种方式影响服务器?超载吗?甚至是易于使用的攻击技术?
  • @Deharlan 。 . .参数化变量是防止攻击的好方法。 inserts 的效率不低于updates。事实上,它们可能更快(无需查找和读取原始记录,无需记录旧值和新值)。
  • 非常感谢,你真的帮了我,希望更多人看到,为你加分。
【解决方案2】:
Update TABLE
SET COLUMN_NAME = COLUMN_NAME_A + COLUMN_NAME_B 
WHERE "Condition"

【讨论】:

  • 我开始觉得自己太笨了,竟然错过了这么简单的事情。
  • @Deharlan 。 . .如果您使用的是 MySQL,这将不起作用。我认为您正在使用 SQL Server。
  • @GordonLinoff 我会改进这个问题,你帮我做
【解决方案3】:

UPDATE tbl_Name SET ColumnName = ColumnName + 'b' WHERE Condition

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多