我创建了以升序命名的元素,例如
<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
要求背后的原因,但有没有可能的原因来说明为什么要按降序输入数据呢?
答案 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