我有一个带有一些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
我认为这是后续跟踪的结论,首先是一个,然后他只是选择他首先找到阵列中的那个人吗?如何使此更严格,以便查询不会更改数组顺序?
提前致谢。 尼克
答案 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')
可以胜任。
答案 2 :(得分:0)
考虑底层代码将要做什么。
它在文件中经过它们几乎可以通过id和测试进行排序,如果它在你的数组中有一些完全不同的顺序。
$ array中项目的顺序与请求完全无关,重要的是否存在。