如何使用SQL UPDATE向当前值添加值

时间:2014-01-31 18:11:51

标签: sql pdo sql-update

我正在我的网站上创建一个访问日志,无论何时一个人进入该网站,他都会在数据库中的同一个注册表中设置日期和时间。然而,他没有删除最后一次访问,而是添加了另一个。例如:

这是当前值: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);
}

我需要做什么?

3 个答案:

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

Update TABLE
SET COLUMN_NAME = COLUMN_NAME_A + COLUMN_NAME_B 
WHERE "Condition"

答案 2 :(得分:0)

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