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