如果我在mysqli :: query中使用SELECT语句,那么默认的ORDER BY是什么

时间:2011-11-28 19:19:51

标签: php mysql mysqli

如果我有这样的表:

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中运行相同的查询,它会按照我期望的顺序给出结果,这是它们在表格中输入的顺序。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

如果没有order by子句,我绝不会假设任何具体的订单。如果您希望按ID排序行,请使用order by ID

答案 1 :(得分:3)

简短回答:没有。

答案很长: 对于MyISAM表,它是自然顺序,即行存储在磁盘上的顺序,通常是插入顺序。这可以通过运行ALTER TABLE ORDER BY来修改 对于InnoDB表,它是主键的顺序。