【问题标题】:codeigniter db->select handle mysql joins automaticlycodeigniter db->select 自动处理 mysql 连接
【发布时间】:2013-01-15 10:33:48
【问题描述】:

表格

ID|owner_id|work_id|lorem|etc|
1 |00123   | 00213 |XXXXX|XXX|
2 |00124   | 00213 |XXXXX|XXX|

owner_id (fk) owners.id (owners[id,name,etc])

work_id (fk) work.id (work[id,name,etc])

问题是我可以设置codeigniter,当我

select(table.*,work.name as work,owners.name as owner) from table

它会自动处理连接,因为该表已经包含 fk-ref ?或者我必须包含join('owner','owner.id=table.owner_id)

实际上我想要的是,当我选择一个包含 fk 的表时,只需在 ref 表上传递列名,这个 fk 列就会被 ref 行中的一列替换,而不必担心在我的每个查询的模块。

我目前的解决方案:

是为每个包含关系的表创建一个视图,并用所需的 ref 值替换所有 fk 列,但由于我有 6 个表,其中 5 个用 fk,我现在有 6 个表和 5 个视图(11 个表) db 这对我来说真的很困惑,所以有什么更聪明的方法吗?

【问题讨论】:

  • 如果是这样,那么设置关系的唯一实际好处就是级联动作!否则,我可以先执行 2 个单独的选择查询以获取主行,然后使用简单的 where id=fk 获取所需的参考值!对吗?
  • 或者您可以使用一个连接语句在一个查询中同时完成这两个操作

标签: php mysql codeigniter activerecord left-join


【解决方案1】:

我认为您对 FK 是什么以及它在表格中的作用有些混淆。

FK 约束在数据存在时授予数据完整性并关联表中的数据。它不加入任何东西。

如果要跨相关表选择记录,可以使用

SELECT * FROM table1,table2 WHERE table1.K1 = table2.FK1

SELECT * FROM table1 JOIN table2 ON table1.K1 = table2.FK1

是的,您需要告诉 CodeIgniter 进行这些查询

【讨论】:

  • 我会补充一点,在使用 CodeIgniter 之前在 SQL 中构建查询是一种很好的做法,这样写代码会更容易。
猜你喜欢
  • 1970-01-01
  • 2018-03-27
  • 2013-08-04
  • 1970-01-01
  • 2016-01-05
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
相关资源
最近更新 更多