2011-11-28 42 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中。如果你不关心订单,那么不要使用订单。如果你这样做,然后使用顺序。数据库非常快。如果你不需要,不要优化。 –

相关问题