按照指定的顺序从SQL表插入INTO


INSERT INTO from SQL Table with specified order

我正试图将数据从一个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 BYFIND_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);

编辑:你真的应该改变你的数据库设计。这不是一个好办法。