【问题标题】:inner join with codeigniter duplicating results与codeigniter重复结果的内部连接
【发布时间】:2014-03-26 01:21:35
【问题描述】:

我有以下代码,我试图从大约 4 个不同的表中获取基于一个订单号的信息。我正在使用 codeigniter,并使用以下代码获得相同记录的副本。当数据库中只有一个真正存在时,基本上会显示两行。

function get_orders($user_id)
{
    $this->db->select('*');
    $this->db->from('Orders');
    $this->db->join('Order_Options', 'Orders.orderNumber = Order_Options.orderNumber');
    $this->db->join('Order_Products', 'Orders.orderNumber = Order_Products.orderNumber');
    $this->db->join('Order_Status', 'Orders.order_status = Order_Status.id');
    $this->db->where(array('user_id' => $user_id));

    $query = $this->db->get();
    return $query->result();
}

我从 codeigniters 在线用户手册中获得了此代码。我自己添加的唯一行是wherereturn 行。

【问题讨论】:

  • 如何解决这个问题?

标签: php sql codeigniter


【解决方案1】:

Debug 在控制器的构造函数中启用PROFILER

$this->output->enable_profiler(TRUE);

这将在您的VIEW 下方显示所有详细信息,包括已执行的queries。在 phpmyadmin 中使用该查询并进行调试。

【讨论】:

  • 我按照你在 phpmyadmin 中所说的做了,我删除了代码中的第一个连接,只检索了一个包含所有变量的结果。
【解决方案2】:

我不知道这个工具,但这应该为订单中的每个产品返回一个单独的记录。 (或者每个选项。这些看起来像多对多连接表。我假设状态 ID 是唯一的,所以可能不是这样。)

我要做的调试是开始简化查询,然后我可以看到哪个部分导致了重复。

【讨论】:

    【解决方案3】:

    检查一下

    function get_orders($user_id)
        {
            $query=$this->db->select('*');
            ->distinct()
            ->from('Orders');
            ->join('Order_Options', 'Orders.orderNumber = Order_Options.orderNumber');
            ->join('Order_Products', 'Orders.orderNumber = Order_Products.orderNumber');
            ->join('Order_Status', 'Orders.order_status = Order_Status.id');
            ->where(array('user_id' => $user_id));
            ->get();
            return $query->result();
        }
    

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2018-12-11
      • 2019-04-18
      • 1970-01-01
      • 2014-05-25
      • 2013-04-18
      • 1970-01-01
      • 2013-04-22
      • 2023-03-25
      相关资源
      最近更新 更多