数据按降序插入 - 无法弄清楚原因

时间:2012-11-26 10:48:34

标签: php mysql

我创建了以升序命名的元素,例如

<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要求背后的原因,但有没有可能的原因来说明为什么要按降序输入数据呢?

2 个答案:

答案 0 :(得分:2)

您对表有订单的假设是错误的。使用ORDER BY SQL子句检索数据时,可以获得所需的顺序。否则,表格未分类。

更新:是的,最后,数据库只是文件。但是MySQL在磁盘扇区上编写的确切算法只能通过查看C源代码来猜测,虽然我可以弄清楚一般指导原则是什么:把东西放在你认为更快的地方。当你执行SELECT没有ORDER BY时,你倾向于获得相同的明显顺序,但这只是因为没有理由让MySQL浪费资源试图对行进行排序或随机化。一个简单的OPTIMIZE TABLE可以改变这个行顺序。

答案 1 :(得分:1)

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

ALTER TABLE `table_name` ORDER BY `id_column`

然后应该将默认值设置为该列的升序。

另一种方法是在select语句中添加ORDER BY

SELECT * FROM `table_name` ORDER BY `id_column` ASC