3

好的,伙计们,我会尽力分享我的猜测,这是可以理解的。所以我有 2 个如下表: TABLES 中的所有 Id 都是自动增量。

Number

id  number

10   100
11   102
12   105
13   106

subnumber

id  number_id   subnumber

52     10           10
53     11           15
54     13           40

您会看到一些数字(不是全部)有子编号。我的意思是:从表number中 id = 13 的数字具有子编号,它等于 40。我想将此表保存在另一个表中。

$sql1=mysql_query('SELECT number FROM number');


$while(fetch1=mysql_fetch_array($sql1))
{
   mysql_query('
   INSERT INTO `save_number` (number)'
   VALUES ('.$fetch1['number'].');
   );
}


save_number

id      number
100      100
101      102
102      105  
103      106

现在我要将表(子编号)保存在另一个表(save_subnumber)中

$sql2=mysql_query('SELECT number_id, subnumber FROM subnumber');

$while(fetch2=mysql_fetch_array($sql2))
{
   mysql_query('
   INSERT INTO `save_subnumber` (number_id, subnumber)'
   VALUES ('.$fetch2['number_id'].', '.$fetch2['number'].');
   );
}

save_subnumber

id  number_id   subnumber
60     10           10
61     11           15
62     13           40

因此,您会看到 number_id FROM save_subnumber 不等于新插入的 id FROM save_number。如果有人帮助我,我将不胜感激。顺便说一句,我仍在使用 mysql_query。我找不到时间将我的 SQL 改进为 PDO :)

4

2 回答 2

2

您的第一个查询可以更改为

INSERT INTO
  save_number (number)
SELECT
  number
FROM 
  number

这将节省您使用 PHP 遍历行的时间,并且速度会更快。很多。

考虑到这一点,您的第二个查询将是

INSERT INTO
  save_subnumber (number_id, subnumber)
SELECT DISTINCT
  sn.id, s.subnumber
FROM
  saved_number AS sn
CROSS JOIN
   number AS n
USING (number)
INNER JOIN
  subnumber AS s
ON
  n.id = s.number_id
于 2013-09-24T07:14:49.283 回答
1

如果您只想将一个表复制到另一个表中,为什么不使用这样的东西

INSERT INTO save_number SELECT * FROM number;
于 2013-09-24T07:11:44.670 回答