Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CodeIgniter中的多对多联接查询_Codeigniter_Many To Many - Fatal编程技术网

CodeIgniter中的多对多联接查询

CodeIgniter中的多对多联接查询,codeigniter,many-to-many,Codeigniter,Many To Many,以前所有的连接尝试都给我留下了填充结果id、标题键的光盘或项目数据(可能发生冲突) 因此,我: item table fields: id, title disc table fields: id, title item_disc table fields: item_id, disc_id 如何构造双连接,以便访问项目的相关光盘。目前,我正在运行两个独立的查询,一个用于单个项目记录,另一个用于光盘阵列 除了在一个查询中使用联接更容易之外,如果我想要检索多个记录,我当前需要为每个项运行两个

以前所有的连接尝试都给我留下了填充结果id、标题键的光盘或项目数据(可能发生冲突)

因此,我:

item table
fields: id, title

disc table
fields: id, title

item_disc table
fields: item_id, disc_id
如何构造双连接,以便访问项目的相关光盘。目前,我正在运行两个独立的查询,一个用于单个项目记录,另一个用于光盘阵列

除了在一个查询中使用联接更容易之外,如果我想要检索多个记录,我当前需要为每个项运行两个查询,因为我无法联接数据


请帮忙!!我觉得这是我最后的多对多障碍(尽管不敢说得太早)。

因为项目和光盘都有名为id和title的列,它们会相互覆盖。您需要使用
as
来区分它们

对于所有项目及其相关光盘:

select m.*, i.title as item_title, d.title as disc_title
from item i, disc d, item_disc m where i.id = m.item_id and
d.id = m.disc_id order by i.title, d.title
对于一个项目及其光盘:

select m.*, i.title as item_title, d.title as disc_title
from item i, disc d, item_disc m where i.id = m.item_id = ? and
d.id = m.disc_id order by d.title

替换?对于您想要的项目,这里有一个CodeIgniter实现,它是多对多数据库关系的实现,我正在编译为一系列屏幕广播。这是抽象的,不打算在生产环境中使用。因此,它应有助于澄清这一概念


除此之外,这绝对是完美的!!!!!为什么我不需要使用JOIN(我使用的是ActiveRecord,而您的查询转换为原样工作)。糊涂了!还有,有没有什么聪明的方法可以让结果更直观地使用,即使用光盘的子阵列只使用一次item_id、item_title?或者我只需要使用foreach来处理它就可以了。@esrylx:基本上sql在“嵌套结果”方面不是很好,所以由数据的使用者来循环结果集,并在项目id更改时检查以检测分组的结束。。。