两个INSERT INTO语句用于同一行SQL / php

时间:2017-11-11 12:34:42

标签: php mysql sql

我一直在努力,我无法找到解决这个问题的方法。 我有两个不同的INSERT语句:

INSERT INTO `logList`(`User_ID`) SELECT `User_ID` FROM `userList` WHERE keyname='somevalue';
INSERT INTO `logList`(`ttime`) VALUES (CURRENT_TIMESTAMP);

如果我执行它们,它们当然会插入2个不同的行。如何创建仅返回一行的INSERT? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

我将假设这是你真正想要的:

INSERT INTO logList (User_ID, ttime)
    SELECT User_ID, CURRENT_TIMESTAMP
    FROM userList
    WHERE keyname = 'somevalue';

我怀疑你想要两个单独的行,一个用户和NULL用于时间,另一个用NULL用于用户和时间值。

我应该注意,您可以定义loglist,因此ttime默认为插入的当前时间戳。 documentation中描述了使用此类默认值。

如果你这样做,那么:

INSERT INTO logList (User_ID)
    SELECT User_ID
    FROM userList
    WHERE keyname = 'somevalue';

始终设置ttime

答案 1 :(得分:1)

正如您所问,您可以在一个插入中执行此操作:

INSERT INTO `logList`(`User_ID`, `ttime`)
    SELECT `User_ID`, CURRENT_TIMESTAMP
    FROM `userList`
    WHERE keyname='somevalue';

答案 2 :(得分:0)

你有这个命令:

INSERT INTO `logList`(`User_ID`) SELECT `User_ID` FROM `userList` WHERE keyname='somevalue';
INSERT INTO `logList`(`ttime`) VALUES (CURRENT_TIMESTAMP);

这将创建两行,并且您想要创建一行。您可以使用单个命令执行此操作:

insert into loglist(USER_ID, ttime)
select User_ID, now()
from userList
where keyname = 'somevalue';

然而,即使这是一个解决方案,它也不是一个非常优雅的解决方案。您应该alter loglist并修改ttime以获得default CURRENT_TIMESTAMP的值,然后您可以像这样简化insert命令:

insert into loglist(USER_ID)
select User_ID
from userList
where keyname = 'somevalue';

这应该是正常的行为,因为你的loglist表可能应该具有插入时刻的时间戳。