我需要用一百个左右的假记录填充一个当前空表,以模拟过去两年的登录,以测试我的代码。
登录表架构如下所示:
CREATE TABLE `Logins` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`User_ID` int(11) NOT NULL,
`Date_Login` datetime NOT NULL,
`Location` enum('site','admin') NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我一般都是SQL的新手,所以,我一点也不知道查询应该是什么样的
INSERT INTO `Logins` (`User_ID`,`Date_Login`,`Location`) VALUES ...
我需要的是在Logins
中插入N个条目(比方说100),以便
User_ID
从Users
表的ID
字段中提取其值Date_Login
应介于2年前和现在Location
应该在'site'
和'admin'
之间切换,但'site'
的权重会更高(比如80%的时间)。希望我能收集到一些SQL-fu来帮助解决类似的问题:D
谢谢!
(我正在使用MySQL 5.1)
答案 0 :(得分:2)
这是一个将单行插入Logins表的SQL语句。您可以重复运行(例如在存储过程中)以获取多个记录。您必须多次运行才能获得多条记录,因为如果将LIMIT 1
增加到LIMIT 10
,您将获得10条记录,但每条记录的User_ID
值都相同。
INSERT INTO `Logins` (`User_ID`, `Date_Login`, `Location`)
SELECT
users.ID AS `User_ID`,
DATE_SUB(NOW(), INTERVAL FLOOR(1 + (RAND() * (365 * 2))) DAY) AS `Date_Login`,
IF(RAND() > 0.8, 'admin', 'site') AS `Location`
FROM users
ORDER BY RAND()
LIMIT 1;
通常ORDER BY RAND()
样式不好,因为效率低,但这不是对性能敏感的任务。
答案 1 :(得分:0)
如果您想使用完整的SQL解决方案,可以使用以下方法创建循环:http://dev.mysql.com/doc/refman/5.1/en/iterate-statement.html 要获得随机日期,您可以将RAND()与+,*和一些时间戳结合使用。