2011-11-28 41 views
1

如果我有這樣的一個表:什麼是默認ORDER BY如果我使用mysqli的SELECT語句::查詢

int  VARCHAR  int 
----------------------------------  
1   "U"   1 
2   "A"   1 
3   "B"   1 

,我跑通過PHP中的MySQLi這樣的查詢:

$sql = "SELECT * FROM " . parent::GetTableName(); 
if ($current_user_only == TRUE) 
    $sql = $sql . " WHERE userID_FK=" . parent::GetUserID(); 

$result = $this->get_db_con()->query($sql); 
if ($result == FALSE) 
    throw new Exception("SQL exec failed (". __FILE__ . __LINE__ . "):  $this->get_db_con()->error"); 

while ($row = mysqli_fetch_array($result)) 
{ 
    echo($row[1]); 
} 

我得到的輸出是這樣的:

2   "A"   1 
3   "B"   1 
1   "U"   1 

這就是結果似乎是由VARCHAR列進行排序。如果我在SEQUEL PRO中運行相同的查詢,它會按照我期望的順序給出結果,這是他們在表中輸入的順序。

任何想法?

+0

你應該明確地設置*順序*不管數據庫。 – 2011-11-28 19:22:23

+0

ALTER TABLE'TABLE' ORDER BY'ID' – misima

+0

如果我其實不在意訂單,我應該還是「ORDER BY」?會影響性能嗎? –

回答

3

簡答:沒有。

長答案: 對於MyISAM表,它是自然順序,即行存儲在磁盤上的順序,通常是插入的順序。這可以通過運行ALTER TABLE ORDER BY 來修改。對於InnoDB表,它是主鍵的順序。

+1

我使用InnoDB表,我的結果沒有被PK排序。 –

+0

在我身邊過分簡單化了一下。 InnoDB的PK是聚簇索引的基礎,其中存儲了所有數據。它是一個樹狀數據結構。行按照遍歷該結構的順序返回。 – Mchl

4

我不會假定沒有訂單條款的任何特定訂單。如果您希望將行按ID排序,則使用order by ID

+0

它會影響性能嗎?如果是的話,我不想「按順序排列」。 –

+0

如果需要排序,它當然會對性能產生影響。但它會比自己排序更快,尤其是在PHP中。如果你不關心訂單,那麼不要使用訂單。如果你這樣做,然後使用順序。數據庫非常快。如果你不需要,不要優化。 –

相關問題