2011-01-22 13 views
3

自動増分のID番号が正しい順序で整列していないことがわかりましたphpMyAdminの参照ボタンをクリックすると - それは私です?私がdbテーブルで間違って設定したものは何ですか?あなたがテーブルに一連のデータを挿入し、あなたにもそれらのいくつかを削除したので、あなたはphpMyAdminの上で、この表をチェックしたときに、これらのデータは、このような順序で表示されなければならない、MySQL:ID番号の自動増分の矛盾

id 

2 
24 
28 
296 
300 
例えば

が、私のテーブルのほとんどで、彼らは

、以下、この絵のように

id 

24 
300  
2 
296  
28 

、代わりに彼らはこのようなものに表示され、受注に表示されません。

正しい順序でIDが表示されるようにすることはできますか?

EDIT 1:

私はあなたのほとんどは、私がここに家宅捜索問題を誤解していると思います。つまり、phpMyAdminのBrowserボタンをクリックすると、テーブル内のすべてのデータが一覧表示されます。を使用してSQLクエリを使用して出力を一覧表示するときは表示されません。

意味がありますか?

alt text

EDIT 2:

これは私のテーブル構造の一つである - それはそれで間違っているものを見るためにあなたを助けるでしょうか?

CREATE TABLE IF NOT EXISTS `root_pages` (
    `pg_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `pg_url` varchar(255) DEFAULT NULL, 
    `pg_title` varchar(255) DEFAULT NULL, 
    `pg_subtitle` varchar(255) DEFAULT NULL, 
    `pg_description` text, 
    `pg_introduction` text, 
    `pg_content_1` text, 
    `pg_content_2` text, 
    `pg_content_3` text, 
    `pg_content_4` text, 
    `pg_order` varchar(255) DEFAULT NULL, 
    `pg_hide` varchar(255) DEFAULT '0', 
    `pg_highlight` varchar(255) DEFAULT '0', 
    `pg_important` varchar(255) DEFAULT '0', 
    `pg_parent` varchar(255) DEFAULT '0', 
    `parent_id` varchar(255) DEFAULT NULL, 
    `pg_cat_id` varchar(255) DEFAULT NULL COMMENT 'page category id', 
    `ps_cat_id` varchar(255) DEFAULT NULL COMMENT 'post category id', 
    `tmp_id` varchar(255) DEFAULT NULL COMMENT 'template id', 
    `pg_backdate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `pg_created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `pg_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`pg_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

答えて

1

これはあなたに当てはまるが、タイプINTのあなたのPKですか? VARCHARやTEXTのようなものなら、あなたが示した例のように注文することができます。そしてあなたはその列があなたのPKだと確信していますか?表のSHOW CREATE TABLE出力をポストすると、より明確になることがあります。

使用しているストレージエンジンはどれですか。 selectのデフォルトの順序は、正しく覚えていれば、MYISAMの挿入順とInnoDBのPKです。これはMySqlのバージョンにも依存します。どのような状況においても、select文でORDER BYを使用してください。

+0

お返事ありがとうございます。私はちょうど上記のテーブル構造を投稿しました。ありがとう! – laukok

+0

PKは主キーです。 MYISAMをストレージエンジンとして使用していることを、作成した文章から確認します。そのエンジンのデフォルトの選択順序は、レコードが挿入された順序です。だからあなたが得ている結果を得るのです。主キーによる選択を確実に行う唯一の方法は、選択したクエリでORDER BYを使用することです。 phpmyadminのデフォルトの動作のみに興味があるので、phpmyadminのコードを変更することで、thosを達成できます。ストレージエンジンをInnoDBに変更しようとする可能性があります。これは、デフォルトではPKの順序付けをselect – inquam

7

あなたが好きなように出力を注文することができます:ORDER BY id ASC

テーブル内のレコードには、固有の順序はありません。

+1

ascは技術的には必須ではありませんが、デフォルトの注文はないという意味で+1です。 –

+1

@Omar: 'ASC'は明示的で読みやすいので、昇順を間違いなく指定したい場合は、省略する必要はありません。 –

2

IDで注文する場合は、order by句を選択する必要があります。 SQLで

あなたがそれらで何をしたいの順序を指定しない限り、selectによって返されたセットは順不同です。

あなたはそれを指定しない限り、実際の順序はランダムになりますことを前提とすべきです。実際はランダムではなく任意ですが、テーブルの内容を変更すると順序が簡単に変更される可能性があります。