MySql查询返回的数组没有像输入数组那样排序

时间:2012-04-05 13:25:11

标签: mysql arrays zend-framework

我有一个带有一些id的数组,我用它来从数据库中选择一个行集。

选择顺利但我在订购的给定数组中没有收到我的结果

插入数组(var_dump)

  0 => string '40201' (length=5)
  1 => string '44089' (length=5)
  2 => string '42106' (length=5)
  3 => string '42740' (length=5)
  4 => string '43812' (length=5)
  5 => string '44331' (length=5)
  6 => string '42109' (length=5)
  7 => string '44147' (length=5)
  8 => string '40464' (length=5)
  9 => string '42108' (length=5)

输出数组

array
  0 => 
    array
      'id' => string '40201' (length=5)
  1 => 
    array
      'id' => string '40464' (length=5)
  2 => 
    array
      'id' => string '42106' (length=5)
  3 => 
    array
      'id' => string '42108' (length=5)
  4 => 
    array
      'id' => string '42109' (length=5)
  5 => 
    array
      'id' => string '42740' (length=5)
  6 => 
    array
      'id' => string '43812' (length=5)
  7 => 
    array
      'id' => string '44089' (length=5)
  8 => 
    array
      'id' => string '44147' (length=5)
  9 => 
    array
      'id' => string '44331' (length=5)

我的查询:

    $select = $this->_db
        ->select()
    ->from(array('file' => 'filehosts'), array('id'))
    ->where('file.id IN(?)', $array);

    $result = $this->getAdapter()->fetchAll($select);
    return $result

我认为这是后续跟踪的结论,首先是一个,然后他只是选择他首先找到阵列中的那个人吗?如何使此更严格,以便查询不会更改数组顺序?

提前致谢。 尼克

3 个答案:

答案 0 :(得分:1)

Mysql FIELD功能将起作用。

$select = $this->_db->select()
->from(array('file' => 'filehosts'), array('id'))
->where('file.id IN(?)', $array)
->order(new Zend_Db_Expr('FIELD(file.id, ' . implode(',', $array) . ')'));

$result = $this->getAdapter()->fetchAll($select);
return $result

答案 1 :(得分:0)

进行查询时,您可以使用ORDER BY

订购结果
SELECT * FROM `file` WHERE `file`.`id` IN $array ORDER BY `file`.`id` ASC

我不熟悉zend,但我认为->order('file.id')可以胜任。

请参阅Zend documentation

答案 2 :(得分:0)

考虑底层代码将要做什么。

它在文件中经过它们几乎可以通过id和测试进行排序,如果它在你的数组中有一些完全不同的顺序。

$ array中项目的顺序与请求完全无关,重要的是否存在。