2

我有一个带有一些 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)

我的zend查询:

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

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

我认为这是 id 跟进的结论,第一个被拿走了,然后他只拿了他首先找到的那个在数组中的人,对吗?我怎样才能使这个更严格,这样查询就不会改变数组顺序?

提前致谢。缺口

4

3 回答 3

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
于 2012-04-05T15:24:41.087 回答
0

When you do a query, you can order the results with ORDER BY

SELECT * FROM `file` WHERE `file`.`id` IN $array ORDER BY `file`.`id` ASC

I'm not familiar with zend, but I think ->order('file.id') could do the job.

See Zend documentation

于 2012-04-05T13:31:58.270 回答
0

想想底层代码会做什么。

它在几乎可以肯定按 id 排序的文件中遍历它们,并测试它是否在您的数组中,而数组中的顺序完全不同。

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

于 2012-04-05T13:45:52.257 回答