将结果合并为一个,如果是多个

时间:2016-09-29 07:30:35

标签: codeigniter

我有以下两个功能

public function get_posts() {
    $this->db->select('p.post_id, p.reply_id, p.user_id, u.username');
    $this->db->from('post as p');
    $this->db->join('user as u', 'u.user_id = p.user_id');
    $this->db->where('p.post_id', $this->input->get('post_id'));
    $this->db->or_where('p.reply_id', $this->input->get('post_id'));
    // $this->db->group_by('p.user_id');
    $query = $this->db->get();
    return $query->result_array();
}

结果输出

SELECT * FROM `post` WHERE `post_id` = '1' AND `reply_id` = '0' AND `user_id` = '2'
SELECT * FROM `post` WHERE `post_id` = '3' AND `reply_id` = '1' AND `user_id` = '1'
SELECT * FROM `post` WHERE `post_id` = '5' AND `reply_id` = '1' AND `user_id` = '1'

总帖子功能

public function total_posts_by_user($user_id, $reply_id, $post_id) {
    $this->db->from('post');
    $this->db->where('post_id', $post_id);
    $this->db->where('reply_id', $reply_id);
    $this->db->where('user_id', $user_id);
    // $this->db->group_by('user_id');
    $query = $this->db->get();

    if ($query->num_rows() > 0) {
        return $query->num_rows();
    }
}

total_posts_by用户获取下面图片中显示的帖子数量

enter image description here

  

问题正如您所看到的,显示了2个管理行结果。但是我   希望它们合并,所以它只会说管理员和2行   讯息。

我尝试在get_post上使用group_by()但是dos无法正常工作

控制器

<?php

class Who_replied extends MX_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
        $data['posts'] = array();

        $results = $this->get_posts();

        foreach ($results as $result) {
            $data['posts'][] = array(
                'username' => $result['username'],
                'total' => $this->total_posts_by_user($result['user_id'], $result['reply_id'], $result['post_id'])
            );

            $this->total_posts_by_user($result['user_id'], $result['reply_id'], $result['post_id']);
            echo $this->db->last_query() . '</br>';
        }

        $data['total_posts'] = $this->total_posts();

        return $this->load->view('default/template/forum/categories/who_replied_view', $data);

    }
}

2 个答案:

答案 0 :(得分:0)

在第一种方法中使用left join,因为当前它正在使用内连接。之后使用

public function get_posts() {
    $this->db->select('p.post_id, p.reply_id, p.user_id, u.username');
    $this->db->from('post as p');
    $this->db->join('user as u', 'u.user_id = p.user_id','left');
    $this->db->where('p.post_id', $this->input->get('post_id'));
    $this->db->or_where('p.reply_id', $this->input->get('post_id'));
    $this->db->group_by('p.post_id');
    $query = $this->db->get();
    return $query->result_array();
}

然后试试。如果仍然面临同样的问题,请仔细检查是否有相同的TWO用户名admin

**你试过DISCTINCT吗? 希望它会有所帮助

答案 1 :(得分:0)

我使用COUNT(p.user_id)AS总计<{3}}找到了我的解决方案

A<Integer> obj= new A<Integer> ();

obj.add(1);
obj.add(2);
obj.add(3);
obj.add(4);

Integer[] arr = obj.toArray(Integer.class, obj.size());