【问题标题】:mysql query in codeigniter's active record在codeigniter的活动记录中查询mysql
【发布时间】:2011-10-25 09:48:25
【问题描述】:

我正在运行这个查询,

$this->db->select('news.news_id, news.title, news.article, news.date_posted, news_assets.news_assets_id, news_assets.url')
        ->from('news_assets')
        ->join('news', 'news_assets.news_news_id = news.news_id', 'left')
        ->order_by('news.date_posted', 'DESC');

        $query = $this->db->get();

        return $query->row_array();

现在这个查询返回一篇新闻文章,它应该从新闻资产表中返回任何属性资产,新闻资产表与新闻有 1:n 的关系,所以一篇新闻文章可能有无限数量的资产,但资产只有 1 篇新闻文章。

我的问题是,当我运行此查询时,只返回一篇新闻文章的一项资产,为什么会这样?

【问题讨论】:

    标签: php mysql codeigniter activerecord relational-database


    【解决方案1】:

    首先,至于我的想法,您应该选择新闻并加入news_assets,因为据我了解,您的资产属于一篇新闻文章。

    你还有$query->row_array();,它只返回一行,但如果你有1+行,你应该使用,根据this

    foreach ($query->result_array() as $row) {
       echo $row['title'];
       echo $row['name'];
    }
    

    【讨论】:

      【解决方案2】:

      也许您的资产表中确实只有一行,但如果没有,我猜您的 JOIN 是错误的, 也许你正在做左而不是右或其他方式

      【讨论】:

      • 这最适合作为评论,而不是作为答案
      【解决方案3】:

      试试下面的查询。

          $this->db->select('news.news_id, news.title, news.article, news.date_posted, news_assets.news_assets_id, news_assets.url');
          $this->db->from('news_assets');
          $this->db->join('news', 'news.news_id=news_assets.news_news_id', 'left');
          $this->db->order_by('news.date_posted', 'DESC');
      

      【讨论】:

      • 加入列未正确写入。
      • 抱歉,您应该在答案中指定,因为它有点难以发现
      猜你喜欢
      • 2012-11-15
      • 1970-01-01
      • 2016-03-10
      • 2012-01-23
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多