来自sql的CodeIgniter查询

时间:2017-02-11 02:51:12

标签: sql codeigniter

如何将此sql转换为codeigniter查询?我有一张EER图表的截图,可以帮助您更好地理解。所以有三个表可以加入。我猜,一个是“pjesma”,然后是“izvodjac”和“izvodi_pjesmu”。当我运行它并给我想要的结果时,这个sql工作。我也在使用分页,所以我需要以某种方式包含限制和偏移。

EER diagram

SELECT pjesma_id, naslov, naziv
FROM pjesma p, izvodjac i, izvodi_pjesmu ip
WHERE p.pjesma_id = ip.pjesma_pjesma_id
AND i.izvodjac_id = ip.izvodjac_izvodjac_id
模特中的

public function paginacija_pjesme($limit, $offset) {

    $this->db->select('pjesma_id', 'naslov', 'naziv');
    $this->db->from('pjesma p');
    $this->db->join('izvodi_pjesmu ip', 'p.pjesma_id=ip.pjesma_pjesma_id');
    $this->db->join('izvodjac i', 'i.izvodjac_id=ip.izvodjac_izvodjac_id');
    $this->db->limit($limit, $offset);
    $query = $this->db->get();

    return $query->result();
}

编辑: 所以在选择中我使用了错误的语法,这一行:

$this->db->select('pjesma_id', 'naslov', 'naziv');

应该是这样的:

$this->db->select('pjesma_id, naslov, naziv');

1 个答案:

答案 0 :(得分:1)

有些事情,当您处理查询构建器类中的对象时,您可以方法链并使事情变得更加混乱。

您可能会收到一个模糊的列错误,加入而不是为您的选择添加前缀。如果没有发布您正面临的错误,很难说清楚。

总是最好(以防万一)将默认值设置为方法参数,以防你传递一个空白变量(或者由于某种原因不需要)。

当您在FROM语句中使用多个表时,实际上是在进行CROSS JOIN,并且您的新代码正在提供INNER JOIN,尝试直接连接到SQL服务器的连接语法可能会有所帮助,因为您实际上并没有做同样的事情在你的第一个书面查询和codeigniter之间.. 尝试下面的LEFT join只是为了看...如果使用INNER有NULL连接,它们将被省略

print_r($query->result())

你有任何错误吗?如果你$this->db->last_query(),你看到了什么?

尝试吐出SELECT pjesma_id, naslov, naziv FROM pjesma p INNER JOIN izvodi_pjesmu ip ON p.pjesma_id = ip.pjesma_pjesma_id INNER JOIN izvodjac i ON i.izvodjac_id = ip.izvodjac_izvodjac_id # LIMIT 10,0 - 这将输出SQL codeigniter has build。然后直接将其运行到您的数据库,并从那里查看结果。您甚至可以在不需要运行它的情况下看到问题。

这是您当前的codeigniter代码生成的示例(如您所见,与原始查询不同):

{{1}}