使用指定的顺序从SQL表中插入INTO

时间:2012-02-15 09:39:34

标签: php mysql sql

我正在尝试将数据从一个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的顺序输入它们,而不是我将它们输入到原始表单的顺序。

关于如何纠正这个问题的任何想法?

非常感谢提前!

3 个答案:

答案 0 :(得分:0)

使用特定订单插入没有任何意义。

表格中的行已排序。

您必须使用ORDER BY

在检索期间(从&#34;列表&#34;表格)对它们进行排序

MySQL会在插入过程中重新排序行,因为它在主键上有聚簇索引。

答案 1 :(得分:0)

  

需要按指定顺序插入

不是。

  

因为我打算将表中的数据提取到csv文件来创建目录。

欢迎您使用ORDER BY进行此操作。

  

我的主表中有超过50000个项目,并希望将大约500个项目提取到新表中。

你不想再这样了。拥有2张相同日期的表是没有意义的 为什么不能从原始表中生成CSV?

答案 2 :(得分:-1)

您需要{SELECT}查询中的ORDER BY字段refFIND_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);
编辑:你真的应该改变你的数据库设计。这不是一个好方法。