codeigniter:想要的是连接表中最后一行,而不是第一行吗?

8 浏览
0 Comments

codeigniter:想要的是连接表中最后一行,而不是第一行吗?

现在我的联接表返回的是每个主题的第一行,我想让它返回每个主题的最后一行。\n这是我现在的代码:\n

$this->db->select('*');
      ->where('disccategory_id', $cat);
       ->from('discussiontopics as topics');
       ->join('discussionposts as posts', 'posts.topic_id = topics.id', 'left');
       ->order_by('posts.id', 'desc');
       ->group_by('topics.id');

\n也许我只能在联接中使用一个select?但是不确定如何在Codeigniter的Active Record中实现这一点。

0
0 Comments

问题的出现原因是由于在使用CodeIgniter的查询构造器时,无法按照预期获取到联接表的最后一行数据。这是因为在执行查询时,ORDER BY会在分组之后执行,即使在代码中按照顺序写了order_by()group_by(),查询仍然会先执行分组再执行排序。

解决这个问题的方法是手动编写查询语句,可以使用$this->db->query('SELECT ...');的方式来实现。或者可以先获取到不带分组的所有行数据,然后只取第一行数据即可。

希望这些信息能对你有所帮助!

0
0 Comments

问题的出现原因是在使用CodeIgniter框架的数据库查询时,希望获取联接表中的最后一行数据,但实际上获取到的是第一行数据。在查询语句中使用了子查询以及GROUP BY子句,但无法正确地获取最后一行数据。

解决方法是通过调整查询语句的结构和使用正确的查询参数来解决问题。首先,将原查询语句改写为两个子查询的形式。第一个子查询用于获取联接表中的所有数据,并按照posts表中的id字段降序排列。然后将这个子查询命名为"selectedposts"。第二个子查询则将"selectedposts"与topics表进行左联接,并根据topics表中的disccategory_id字段过滤数据。最后,通过GROUP BY子句将结果按照topics表中的id字段进行分组。

同时,为了防止SQL注入攻击,将查询语句中的参数通过数组的形式传递给query()方法的第二个参数。这样可以确保参数的安全性。

以下是修改后的查询语句的代码示例:

$query = $this->db->query("
    SELECT *
    FROM discussiontopics as topics
    LEFT JOIN (
        SELECT *
        FROM discussionposts
        ORDER BY id DESC
    ) AS selectedposts ON (selectedposts.topic_id = topics.id)
    WHERE topics.disccategory_id = ?
    GROUP BY topics.id;
", array($cat));

通过以上的修改,可以正确地获取到联接表中的最后一行数据,并且保证了查询语句的安全性。

0