【问题标题】:How to get data of joined table using query() method如何使用 query() 方法获取连接表的数据
【发布时间】:2021-02-22 07:30:32
【问题描述】:

如果我使用 query(),我在获取连接表的数据时遇到问题。 我没有得到产品表的数据,如何在不使用活动记录的情况下使用 query() 解决这个问题? 这是我的数据库表结构

        category table
        +--------------------------+
        | cId | added  | category  |       
        +-----+--------+-----------+
        |  1  | 1.2.20 |  PC       |
        |  2  | 1.7.20 | electron  |
        +-----+--------+-----------+

        product table
        +--------------------------+
        | id  |  cId   |  cost     |       
        +-----+--------+-----------+
        |  1  |   1    |  3000     |
        |  1  |   2    |  9000     |
        +-----+--------+-----------+

我的模特

    protected $table = 'category';

    public function showProduct()
    {
        $sql = "SELECT 
                     category.*, COALESCE(SUM(product.cost),0) as price 
                FROM category 
                JOIN product 
                ON product.cId = category.cId
                GROUP BY category.cId
            ";
        $this->db->query($sql);
        return $this;
    }

我的控制器

    public function index()
    {
            $result = $this->model->showProduct();
            echo "<pre>";
            print_r($result->asObject()->paginate(1));  
            
            //pagination
            $pager = $this->model->showProduct()->pager->links();
    }

我得到的结果

    Array
    (
        [0] => stdClass Object
            (
                [cId] => 1
                [added] => 1.2.20
                [category] => PC
            )

        [1] => stdClass Object
            (
                [cId] => 2
                [added] => 1.7.20
                [category] => electron
            ),

    )

【问题讨论】:

标签: mysql codeigniter codeigniter-4


【解决方案1】:

要求您运行此代码。

SELECT category.cId,category.added,category.category,product.id,COALESCE(SUM(product.cost),0) as price
FROM category,product
WHERE category.cId=product.cId
GROUP BY category.cId;

如果您使用的是 CodeIgniter-4,那么您可以使用 Query Builder 类轻松编写此代码。

【讨论】:

    【解决方案2】:
    $sql="SELECT category*,product* FROM category INNER JOIN product.cid=category.id WHERE category.id";
    

    【讨论】:

    • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。解释代码时,您也可能会得到用户的积极反馈/赞成。
    • 这仍然与我的问题相同。但是我通过再次定义 $this->table 找到了解决方案
    【解决方案3】:

    我通过在函数中设置这个表属性找到了解决方案。

    型号

    $protected $table = array("default bd table here");
    
    public function showProduct()
    {
        $this->table = array('category');
        
        $sql = "SELECT 
                     category.*, COALESCE(SUM(product.cost),0) as price 
                FROM category 
                JOIN product 
                ON product.cId = category.cId
                GROUP BY category.cId
            ";
        $this->db->query($sql);
        return $this;
    }
    

    我的控制器

    public function index()
    {
            $result = $this->model->showProduct();
            
            //pagination
            $pager = $this->model->showProduct()->pager->links();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2012-07-13
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      相关资源
      最近更新 更多