我做了以下功能,并且工作正常。
public function getLatestCurrencyRates(){
$sql = new Sql($this->adapter);
$subselect2 = $sql->select();
$subselect2->from(array('r1' =>'currency_rates'))
->columns(array('max_c_rate_id' => new Expression('MAX(c_rate_id)')))
->group("currency_id");
$statement = $sql->prepareStatementForSqlObject($subselect2);
$result = $statement->execute();
$rows = array_values(iterator_to_array($result));
return $rows;
}
我将使用相同的表加入上面的select语句。任何人都可以建议如何做到这一点?我目前的实施如下。实际上还没有完成。因为缺乏实施它的知识。
public function getLatestCurrencyRates(){
$sql = new Sql($this->adapter);
$subselect2 = $sql->select();
$subselect2->from(array('r1' =>'currency_rates'))
->columns(array('max_c_rate_id' => new Expression('MAX(c_rate_id)')))
->group("currency_id");
$subselect3 = $sql->select();
$subselect3->from("currency_rates")
->join(array('r2'=>$subselect2), 'r2.max_c_rate_id = currency_rates.c_rate_id', array('c_rate_id', 'currency_id', 'buy_rate', 'sell_rate'));
$statement = $sql->prepareStatementForSqlObject($subselect3);
$result = $statement->execute();
$rows = array_values(iterator_to_array($result));
return $rows;
}
我将在此处实现的SQL查询如下。
select r1.c_rate_id, r2.currency_id, r2.buy_rate, r2.sell_rate
from
(select max(c_rate_id)as c_rate_id from currency_rates group by currency_id) as r1
inner join
currency_rates as r2
on
r1.c_rate_id = r2.c_rate_id;
任何人都可以提供良好的反馈,会有所帮助。
感谢。
答案 0 :(得分:2)
最终我已经完成了。
public function getLatestCurrencyRates(){
$sql = new Sql($this->adapter);
$subselect2 = $sql->select();
$subselect2->from(array('r1' =>'currency_rates'))
->columns(array('max_c_rate_id' => new Expression('MAX(c_rate_id)')))
->group("currency_id");
$subselect3 = $sql->select();
$subselect3->from(array('r2' => $subselect2))
->join("currency_rates", 'max_c_rate_id = currency_rates.c_rate_id', array('c_rate_id', 'currency_id', 'buy_rate', 'sell_rate'));
$statement = $sql->prepareStatementForSqlObject($subselect3);
$result = $statement->execute();
$rows = array_values(iterator_to_array($result));
return $rows;
}
我已经通过$ select->来自()的关联数组,像这样;
$subselect3->from(array('r2' => $subselect2))
->join("currency_rates", 'max_c_rate_id = currency_rates.c_rate_id', array('c_rate_id', 'currency_id', 'buy_rate', 'sell_rate'));
答案 1 :(得分:1)
ZF2的Zend\Db\Sql\Select
- 在我写这篇文章时 - 缺乏$select->join()
中子查询的支持。您只能在$select->columns()
& $select->where()
(带表达式)。
修改强>:
只有$select->join()
不支持子查询,$select->from()
接受它。这意味着整个子查询现在被引用为标识符 - 可能它将被修复为某些2.0。*版本。