【问题标题】:Cross Join with php codeigniter query使用 php codeigniter 查询进行交叉连接
【发布时间】:2019-10-01 20:42:37
【问题描述】:

是否可以从 php.ini 交叉连接?例如: 目前我像这样查询数据库:

                            $company_id = 20;
  $templates_data = $this->db->select('template_id')
                            ->from('dr_template_relational')
                            ->where('dr_template_relational.company_id',$company_id)
                            ->get()
                            ->result_array();

我想做的是这样的:

->from('dr_template_relational')
->cross_join()

在 SO 上有几个对这个问题的回答,但是发布引用了一个常规的 sql 查询,如下所示:

"SELECT * FROM citys LEFT JOIN comments ON comments.city=citys.city WHERE citys.id=$id";

这将是在 SQL 查询中执行此操作的方式,但这里的重点是在 php 中执行此操作并获取通过交叉连接返回的数据。我也意识到可以在 php 中进行查询,让它选择数据并用代码加入它,但我的问题与是否可以简单地添加 ->cross_join() 或类似的东西有关。

【问题讨论】:

标签: php codeigniter


【解决方案1】:

您可以在 codeigniter 中运行原始查询来解决您的问题,如下所示:

$sql 'your query here with cross join';
$query = $this->db->query($sql);

return $query->result_array();

希望对你有帮助:)

【讨论】:

  • 我不得不承认我对codeigniter不熟悉,所以部分出于好奇:你为什么建议使用这种方法而不是->db->join('...'),如manual中所述?手动编写查询(恕我直言)更容易导致 SQL 注入错误。我假设 $company_id 不是硬编码的,而是来自请求的东西。
  • @PetervanderWal 使用原始查询没有问题,因为我们仍然可以在其中绑定数据变量。
【解决方案2】:

您可以使用 CI 加入方法。

$company_id = 20;
        $templates_data = $this->db->select('dr_template_relational.template_id')
            ->where('dr_template_relational.company_id',$company_id)
            ->join('table','dr_template_relational.company_id=table.company_id','LEFT')
            ->get()
            ->result_array();

“LEFT”是连接类型

【讨论】:

  • 这不接受“CROSS”作为有效的连接类型 - 有效类型为 LEFT、RIGHT、OUTER、INNER、LEFT OUTER 和 RIGHT OUTER source
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多