我正试图将数据从一个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=内爆(",",$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());
以将项目输入到新表中。它输入所有已请求的项目,但似乎是按照引用的顺序输入,而不是按照我在原始表格中输入的顺序。
关于如何解决这个问题有什么想法吗?
非常感谢!
使用特定顺序插入没有任何意义。
表中的行不进行排序。
您必须在检索期间(从"列表"表)使用ORDER BY
对它们进行排序
MySQL在插入过程中会重新排列行,因为它在主键上有聚集索引。
它需要插入指定的订单
事实并非如此。
因为我正计划将表中的数据提取到csv文件中以创建目录。
欢迎您使用ORDER BY进行此操作。
我的主表中有50000多个项目,我想在新表中提取大约500个项目。
你不想再这样了。有两张日期相同的桌子是没有意义的
为什么不能从原始表生成CSV?
您需要通过SELECT查询中的ref
字段ORDER BY
,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);
编辑:你真的应该改变你的数据库设计。这不是一个好办法。