【问题标题】:mysql bulk insert referring ID from another tablemysql批量插入引用另一个表的ID
【发布时间】:2013-08-17 05:25:28
【问题描述】:

我有两张桌子:

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?

【问题讨论】:

  • score history 是表还是什么?
  • 不,分数历史记录是要插入 table_score 的数千行。已更新问题以澄清这一点。
  • 这个怎么样... INSERT INTO table_score (uid,Date,Score) VALUES ((SELECT UID FROM table_user WHERE userName='YourUserNAme) ,'2013-07-18',100)跨度>
  • 您是否正在从文件中加载此历史数据?您是否需要按行、按批次、按文件评估用户 ID?
  • Baju Soman - 您的解决方案适用于单行插入,批量插入怎么样?假设为一位用户插入 1000 条得分记录。我不想重复 SELECT 1000 次。

标签: mysql join insert bulk


【解决方案1】:

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;

【讨论】:

  • @LazNiko 有帮助吗?您的问题需要更多帮助吗?
猜你喜欢
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多