我需要用一百条左右的假记录填充一个当前空的表来模拟过去两年的登录以测试我的代码。
登录表架构如下所示:
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 ...
我需要的是将 N 个条目(比如 100 个)插入 Logins
以便
User_ID
从Users
表的ID
字段中提取值Date_Login
应该在 2 年前和现在之间Location
应该在'site'
和'admin'
之间交替,但是'site'
更重要加权(比如 80% 的时间)。
希望我可以收集一些 SQL-fu 以帮助将来解决类似的问题:D
谢谢!
(我使用的是 MySQL 5.1)
最佳答案
这是一个 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()
是糟糕的风格,因为它效率低下,但这不是一项对性能敏感的任务。
关于sql - 用于生成示例数据的快速 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3144548/