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 番目のテキスト ボックスに 2 などを入力すると、挿入後にテーブルに表示されます。

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

これは非常に不可解であり、なぜこれが起こっているのかを知ることができません。入力されたのと同じ順序で値を挿入したいので、これは私にとって重要です。

要件の背後にある理由を説明するのはちょっと難しいenter in the same orderですが、データが降順で入力されている理由について考えられる理由はありますか?

4

2 に答える 2

2

テーブルに順序があるというあなたの仮定は間違っています。ORDER BYSQL 句を使用してデータを取得すると、必要な順序が得られます。それ以外の場合、テーブルはソートされません。

更新:ええ、結局のところ、データベースはファイルに過ぎません。しかし、MySQL がディスク セクタに書き込むために従う正確なアルゴリズムは、C ソース コードを調べて推測するしかありませんが、一般的なガイドラインが何であるかを理解することはできます。SELECTなしで aをORDER BY実行すると、見た目は同じ順序になる傾向がありますが、それは、正当な理由もなく行をソートまたはランダム化しようとして MySQL がリソースを浪費するのは理にかなっていないためです。シンプルOPTIMIZE TABLEにこの行の順序を変更できます。

于 2012-11-26T10:51:28.443 に答える
1

テーブルの作成方法に (関連して) いる可能性があります。次のような sql ステートメントを実行して順序を変更できます。

ALTER TABLE `table_name` ORDER BY `id_column`

次に、その列のデフォルトを昇順に設定する必要があります。

もう 1 つの方法はORDER BY、select ステートメントに and を追加することです。

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