2017-11-11 124 views
2

我一直在努力嘗試,並且找不到解決此問題的解決方案。 我有兩個不同的INSERT語句:同一行的兩個INSERT INTO語句SQL/php

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

如果我執行他們,他們當然會插入2個不同的行。如何製作只返回一行的INSERT? 預先感謝您。

回答

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

+0

好的我已經設法解決,非常感謝。 但是如果不是'CURRENT_TIMESTAMP'有一個實際的變量呢? 'INSERT INTO logList(USER_ID,TTIME) SELECT USER_ID,$變量 從用戶列表 WHERE鍵名= 'someValue中';' 注意的是'$ variable'不屬於'UserList'再次感謝大家。 – Madeo

+0

@Madeo。 。 。沒關係。沒問題。 –

1

當你問,你能做到在一個單一的插入:

INSERT INTO `logList`(`User_ID`, `ttime`) 
    SELECT `User_ID`, CURRENT_TIMESTAMP 
    FROM `userList` 
    WHERE keyname='somevalue'; 
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擁有的CURRENT_TIMESTAMPdefault值,然後就可以像這樣簡化您insert命令:

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

這應該是正常的行爲,因爲你的loglist表大概應該有插入的時間戳無論如何。