我正在尝试将数据从一个SQL数据库表插入到另一个SQL数据库表中。它需要以指定的顺序插入,因为我计划将表中的数据提取到csv文件以创建目录。我的主表中有超过50000个项目,想要在新表中提取大约500个项目。
我创建了一个表单来输入参考编号(ref),它创建了一个参考编号数组。
<form action="list.php" method="post">
<p>List Number <input name="list_no" type="text"></p>
<table align="center" width="50%">
<tr>
<td><input name="item[]" type="text" style="width: 80px"></td>
<td></td>
<td><input name="item[]" type="text" style="width: 80px"></td>
<td></td>
<td><input name="item[]" type="text" style="width: 80px"></td>
<td></td>
<td><input name="item[]" type="text" style="width: 80px"></td>
<td></td>
<td><input name="item[]" type="text" style="width: 80px"></td>
</tr>
</table>
<p>Step 4: Create List.<input name="Submit1" type="submit" value="Create List" /></p>
在list.php上我创建了代码,在我的数据库中使用名称列表创建一个新表...取决于在表单上输入的数字。我从表中分配给数组的数据
$item=$_POST['item'];
我知道$ item中的数据是我输入表单的顺序,因为我使用了$ item_list = implode(“,”,$ item);和echo $ item_list检查输入数据的顺序,并用逗号分隔数据。
我的list.php页面然后使用代码
$insert="INSERT INTO list$list_no (ref, description, price_s)
SELECT ref, description, price_s
FROM stock
WHERE ref IN ($item_list)";
mysql_query($insert) or die(mysql_error());
将项目输入新表格。它输入所有已请求的项目,但是按照ref的顺序输入它们,而不是我将它们输入到原始表单的顺序。
关于如何纠正这个问题的任何想法?
非常感谢提前!
答案 0 :(得分:0)
使用特定订单插入没有任何意义。
表格中的行不已排序。
您必须使用ORDER BY
MySQL会在插入过程中重新排序行,因为它在主键上有聚簇索引。
答案 1 :(得分:0)
需要按指定顺序插入
不是。
因为我打算将表中的数据提取到csv文件来创建目录。
欢迎您使用ORDER BY进行此操作。
我的主表中有超过50000个项目,并希望将大约500个项目提取到新表中。
你不想再这样了。拥有2张相同日期的表是没有意义的 为什么不能从原始表中生成CSV?
答案 2 :(得分:-1)
您需要{SELECT}查询中的ORDER BY
字段ref
,FIND_IN_SET
将保留订单:
$insert = sprintf("INSERT INTO list%s (ref, description, price_s)
SELECT ref, description, price_s
FROM stock
WHERE ref IN ('%s')
ORDER BY FIND_IN_SET(ref, '%s')", $list_no, $item_list, $item_list);
编辑:你真的应该改变你的数据库设计。这不是一个好方法。