希望这里有人能帮我,因为我已经花了两天时间进行搜索。基本上,我试图向CI模型发送一组用户id,并为每个id检索最后10个事务。
我可以限制记录的总数,但我想限制为每个id,并且不知道如何做到这一点?
我读到ROW_NUMBER()
可能是我想要的?但我不确定如何将它从SQL转换为适合在CI模型中使用的东西。以下是我目前拥有的代码:
function getTrans($cData, $date){
$this->db->select('id, userId, date');
$this->db->from('trans');
$this->db->where_in('userId', $cData);
if($date != 0){
$this->db->where('date >=', $date);
}
$this->db->order_by('id','asc');
$query = $this->db->get();
if ($query->num_rows() > 0) {
return $query->result();
} else {
return false;
}
}
正如你所看到的,我正在使用WHERE_IN
来循环id数组,但有没有一种方法可以为调用的每个id添加一个限制,而不仅仅是对整个数量的限制?
我确实尝试在模型中添加一个循环,但它只会不断给我带来500秒的错误(我认为这与生成查询的方式有关?(
非常感谢任何帮助
您可以将$this->db->query()
与以下查询一起使用:
$query = $this->db->query("
SELECT *
FROM
(
SELECT
trans.*,
IF(@sameClass = userId, @rn := @rn + 1,
IF(@sameClass := userId, @rn := 1, @rn := 1)
) AS rank
FROM trans
CROSS JOIN (SELECT @sameClass := 0, @rn := 1 ) AS var
WHERE userId IN (" . implode(', ', $cData) . ")
AND date >= {$date}
ORDER BY userId, id
) AS t
WHERE t.rank <= 10
ORDER BY t.userId, t.rank
");