簡體   English   中英

同一行SQL / php的兩個INSERT INTO語句

[英]Two INSERT INTO statements for the same row SQL/php

我一直在努力,找不到解決此問題的方法。 我有兩個不同的INSERT語句:

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

如果我執行它們,它們當然會插入2個不同的行。 如何制作僅返回一行的單個INSERT 先感謝您。

我將假設這是您真正想要的:

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

我懷疑您是否需要兩行,一行包含用戶和NULL的時間,另一行包含NULL的用戶和一個時間的值。

我應該注意,您可以定義loglist因此ttime默認為插入時的當前時間戳。 文檔中介紹了此類默認值的使用。

如果您這樣做,則:

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

將始終設置ttime

如您所願,您可以在一個插入中完成此操作:

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

您有以下命令:

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和修改ttimedefault的值CURRENT_TIMESTAMP ,然后您可以簡化insert這樣的命令:

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

這應該是正常現象,因為您的loglist列表表可能應該loglist具有插入時刻的時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM