用户定义变量在mysql代码点火器中不起作用

aij0ehis  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(288)

我正在尝试根据按类别名称划分的更新时间对行进行排序。

$query = "SELECT 
   category_name, 
   topic_title, 
   updated_ts,
   @topic_rank := IF(@current_category = category_name, @topic_rank + 1, 1) AS topic_rank,
   @current_category := category_name AS current_category
FROM topic_master
ORDER BY category_name, updated_ts DESC
                ";
$data = $this->db->query($query);
if($this->db->affected_rows() > 0)
    {
        return $data;
    }
    else
    {
        return false;
    }

这个查询在mysql中运行得非常好,给我的主题排名是1、2、3等等。当我在codeigniter中运行这个程序时,所有记录的topic\u排名都是1。
有什么问题吗?

mznpcxlj

mznpcxlj1#

找到了解决这个问题的另一种方法。不知道为什么用户定义的变量不起作用。

select category_name, topic_title as last_topic, updated_ts as last_activity, topic_pri_key as last_topic_id from
                        (
                            select
                                a.category_name, a.topic_title,
                                a.updated_ts, 
                                a.topic_pri_key,
                                count(b.updated_ts)+1 as rank
                            from
                            topic_master a
                            left join
                            topic_master b
                            on a.updated_ts < b.updated_ts and a.category_name = b.category_name
                            group by 1,2,3,4
                        ) a
                        where rank = 1
zzlelutf

zzlelutf2#

尝试使用codeigniger数据库方法 result_array() :

$q = $this->db->query($query);
$data = $q->result_array();

相关问题