0

我已经按升序命名了表单元素,例如

<input type="text" name="v1[abc]" />
<input type="text" name="v2[abc]" />
<input type="text" name="v3[abc]" />
<input type="text" name="v4[abc]" />

我正在使用处理这些值

for($i = 1; $i <= 4; $i++) {

   $v = $_POST['v'.$i];

   insert('tablename', $v);
}

下面是正在使用的插入功能

function insert($tableName, $array) {

    array_map( 'mysql_real_escape_string', $array );

    $qry = mysql_query("INSERT INTO ".$tableName." ( ". implode( ',', array_keys( $array) ) .") VALUES( '". implode( "','", $array ) . "')");

    if(! $qry) {
      die(mysql_error());
    }

}

如果我在第一个文本框中输入 1,在第二个文本框中输入 2,依此类推,插入后这就是我在表格中得到的

----
abc |
----
4   |
3   |
2   |
1   |
----

这非常令人困惑,我无法找出为什么会这样。这对我很重要,因为我希望以与输入相同的顺序插入值。

很难解释enter in the same order要求背后的原因,但是是否有任何可能的原因说明为什么要按降序输入数据?

4

2 回答 2

2

您认为表格有顺序的假设是错误的。ORDER BY当您使用SQL 子句检索数据时,您将获得所需的顺序。否则,表未排序。

更新:是的,最后,数据库只不过是文件。但是 MySQL 在磁盘扇区上写入的确切算法只能通过查看 C 源代码来猜测,尽管我可以弄清楚一般准则是什么:把东西放在你认为这样做会更快的地方。当你不这样做时SELECTORDER BY你往往会获得相同的明显顺序,但这只是因为 MySQL 浪费资源试图无缘无故地对行进行排序或随机化是没有意义的。一个简单的OPTIMIZE TABLE可以改变这个行顺序。

于 2012-11-26T10:51:28.443 回答
1

它可能(与)表的创建方式有关,您可以通过运行类似于以下的 sql 语句来更改顺序:

ALTER TABLE `table_name` ORDER BY `id_column`

然后应该将默认设置为在该列上升序。

另一种方法是将和添加ORDER BY到您的选择语句中:

SELECT * FROM `table_name` ORDER BY `id_column` ASC
于 2012-11-26T10:52:36.497 回答