0

我有两张桌子:

table_user
======================================
UID     UserName
1       UserA
2       UserB
3       UserC


table_score
==============================
UID     Date         Score
2       18/7/2013     100
2       19/7/2013     150

我需要将分数历史数据(数千行)批量插入到 table_score。历史数据仅包含用户名、日期和分数。

我正在做的是让我的 PHP 脚本从 MySQL 加载给定 UserName 的 UID,将 UID 添加到批量插入 SQL 中并将其发送回 MySQL。这需要 PHP 和 MySQL 之间的 2 次通信。我为另一个用户重复上述内容。

是否可以让MySQL在一个SQL中插入日期和分数,并根据给定的UserName自动填写UID?

4

1 回答 1

0

为 MySql 导入海量数据的最快方法是使用LOAD DATA INFILE

如果你有一个像这样的逗号分隔文件

"用户 B","18/7/2013",100
"用户 B","19/7/2013",150
"用户 C","20/7/2013",140

然后你用这样的查询加载它

LOAD DATA LOCAL INFILE '/path/to/your/file.csv' 
INTO TABLE table_score 
   FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
   LINES TERMINATED BY '\n' -- or '\r\n' if it's Windows
(@username, @date, @score) 
SET uid =  
    (
      SELECT uid 
        FROM table_user 
       WHERE username = @username
       LIMIT 1
    ),
    date = STR_TO_DATE(@date, '%d/%m/%Y'),
    score = @score;
于 2013-08-17T07:38:17.540 回答