Search code examples
sqldatabasecodeigniter

How to show the number of items sold for specific value from SQL column and table


I have a very little knowledge about SQL.

I would like to show the numbers of package sold from my SQL database for specific table value for different ID (package ID) on CodeIgniter.

When I try to put some coding, it shows the same numbers of package sold for all packages.

Table: payments

Here is my code:

$this->db->where('payment_status', 'succeeded');
$this->db->where('item_price', '50000.00');
$succeededpayment = $this->db->get('payments');

I want to show only payment_status is succeeded, item_price = 50000 from table (payments) for each different ID (package) but it shows the SAME numbers of package sold for all packages.

The code to show the numbers of package sold:

<?php echo $succeededpayment->num_rows(); ?>

And here is the result;

result of the numbers of item sold

The image above displays 22 package sold (at the top right corner).

Fact: Package 1 has 21 sales and Package 2 has 1 sale.

Quiz controller:

<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Quiz_Controller extends Public_Controller {

    /**
     * Constructor 
     */
    function __construct() 
    {
        parent::__construct();
        $this->load->library('form_validation');
        $this->load->model('HomeModel');
        $this->load->model('Payment_model');
        $this->load->model('PackageModel');
        $this->load->model('TestModel');
        $this->add_css_theme('quiz_box.css');
        $this->add_css_theme('set2.css');

    }
    
    public function set_leader_bord_user_name()
    {
        $response['status'] = 'error';
        $response['msg'] = 'Invalid Response';
        if($this->input->post('inputValue'))
        {
            $response['status'] = 'success';
            $response['name'] = $this->input->post('inputValue');
            $response['msg'] = 'Thanks ! '.$this->input->post('inputValue');
            $this->session->set_userdata('leader_bord_user_name', $this->input->post('inputValue'));
        }
        echo json_encode($response);
    }

    function instruction($quiz_id)
    {
        $quiz_data = $this->TestModel->get_quiz_by_id($quiz_id);
        
        $test_taken = $this->TestModel->get_test_taken($quiz_id,$this->user['id']);

        if($quiz_data->is_registered == 1 && empty($this->user['id']))
        {
            $this->session->set_flashdata('error', 'Login atau Daftar dulu ya!');
            return redirect(base_url("login"));
        }

        if($quiz_data->is_registered == 1 && ($quiz_data->attempt == $test_taken['count']))
        {
            $this->session->set_flashdata('error', lang('test_already_given'));
            return redirect(base_url());
        }    

        $leader_bord_user_name = $this->session->leader_bord_user_name;
        
        if(empty($leader_bord_user_name) && empty($this->user['id']))
        {
           $this->session->set_flashdata('error', lang('user_required')); 
           redirect(base_url(''));
        }

        if(empty($quiz_data))
        {
           $this->session->set_flashdata('error', lang('invalid_id')); 
           redirect(base_url('404_override'));
        }

        $checkUser = $this->db
        ->where('user_id', $this->user['id'])
        ->where('payment_status', 'succeeded')
        ->where('type', 'PACKAGES')
        ->where('due_date >=', date('Y-m-d'))
        ->get('payments')
        ->row();

        if(!$checkUser){
            if($quiz_data->price > 0)
            {
                $quiz_last_paymetn_status = $this->Payment_model->get_quiz_last_paymetn_status($quiz_id);
                if(empty($quiz_last_paymetn_status) && empty($quiz_last_paypal_status))
                {
                    return redirect(base_url("quiz-pay/payment-mode/$quiz_id"));
                }
            }
        }
        
        if($this->session->quiz_session)
        {
            $session_quiz_id = $this->session->quiz_session['quiz_data']['id'];
            return redirect(base_url("test/$session_quiz_id/1"));
        }

        $this->set_title(lang('front_quiz_instruction'), $this->settings->site_name);
        $content_data = array(
            'Page_message'       => lang('front_quiz_instruction'),
            'page_title'         => lang('front_quiz_instruction'),
            'quiz_id'            => $quiz_id,
            'quiz_data'          => $quiz_data,
            'total_participants' => $this->TestModel->get_total_participants($quiz_id, $this->user['id']),
        );

        $data = $this->includes;
        $data['content'] = $this->load->view('instruction', $content_data, TRUE);
        $this->load->view($this->template, $data);
    }

    function category($category_slug=NULL, $page_no=NULL)
    {
        $quiz_filter = $this->input->get('most') ? $this->input->get('most') : '';
        $session_quiz_data = array();
        $session_quiz_question_data = array();

        if($this->session->quiz_session)
        {
            $get_quiz_session = $this->session->quiz_session;
            $session_quiz_data = $get_quiz_session['quiz_data'];
            $session_quiz_question_data = $get_quiz_session['quiz_question_data'];
        }

and the view:

<?php
$quiz_running = 'no_quiz_start';
$session_quiz_id = NULL;
$this->db->where('payment_status', 'succeeded');
$this->db->where('item_price', '50000.00');
$this->db->where('quiz_id', 1);
//$this->db->where('quiz_id', 116);
$succeededpayment = $this->db->get('payments');

$gradients = array();
$gradients[] = 'mask gradient-vue';
$gradients[] = 'mask gradient-angular';
$gradients[] = 'mask gradient-react';
$gradients[] = 'mask gradient-material';
$gradients[] = 'mask gradient-html';
$gradients[] = 'mask gradient-laravel';
$gradients[] = 'mask gradient-react-native';
$gradients[] = 'mask gradient-nuxtjs';

if($session_quiz_data && $session_quiz_question_data) 
{ 
    $quiz_running = 'quiz_running';
    $session_quiz_id = $session_quiz_data['id'];
    echo "<input type='hidden' value='".$session_quiz_id."' class='session_quiz_id'>";        
}

if($quiz_list_data)  
{
    foreach ($quiz_list_data as  $quiz_array) 
    {
        $price = $quiz_array->price > 1 ? '₹ '.$quiz_array->price : ' '.lang('free');
        $start_quiz_link = $quiz_array->price > 1 ? '₹ '.$quiz_array->price : ' '.lang('free');
        $quiz_id = $quiz_array->id;
        $quiz_url = $session_quiz_id == $quiz_id ?  base_url("test/$session_quiz_id/1") : base_url("instruction/$quiz_id");
        $quiz_btn_name = $session_quiz_id == $quiz_id  ?  lang('resume_test') : lang("start_quiz");
        if($quiz_url !=  base_url("test/$session_quiz_id/1") && $quiz_array->price > 1)
        {
            $quiz_url = base_url("quiz-pay/payment-mode/$quiz_id");
            $quiz_btn_name = $quiz_btn_name != lang('resume_test') ? lang('pay_now') : $quiz_btn_name;
        }
        
        if($session_quiz_id == $quiz_id)
        {

            $quiz_running_btn = "";
        }
        else if($quiz_array->price > 1)
        {
            $quiz_running_btn = "";   
        }
        else if($quiz_array->is_registered  == 1)
        {
            $quiz_running_btn = "";   
        }
        else
        {
            $quiz_running_btn = $quiz_running;
        }

        $lang_id = get_language_data_by_language($this->session->userdata('language'));
        $translate_quiz_title = get_translated_column_value($lang_id,'quizes',$quiz_id,'title');
        $quiz_title = $translate_quiz_title ? $translate_quiz_title : $quiz_array->title;
        $quiz_title = strlen($quiz_title) > 40 ? substr($quiz_title,0,40)."..." : $quiz_title;
        $quiz_user_name = $quiz_array->first_name.' '.$quiz_array->last_name;
        $quiz_user_name = strlen($quiz_user_name) > 20 ? substr($quiz_user_name,0,20)."..." : $quiz_user_name;
        
        ?>
        <div class="col-xs-6 col-sm-6 col-md-4 col-lg-3"> 
            <div class="card card-bundle" data-turbolinks="false"> 
                <div class="thumbnail"> 
                    <span class="maskk gradient-defaultt <?php echo xss_clean($gradients[mt_rand(0,7)]); ?>"> </span> 
                    <a href="<?php echo xss_clean($quiz_url); ?>" data-url="<?php echo xss_clean($quiz_url); ?>" id="quiz_<?php echo xss_clean($quiz_array->id);?>" class="thumb-cover  <?php echo xss_clean($quiz_running_btn); ?> statrt_quiz_btn" data-quiz_id="<?php echo xss_clean($quiz_array->id);?>" data-toggle="tooltip"  title="<?php  echo lang('start_quiz');?>"> </a>
                    <div class="details card-dark-shadow"> 
                        <div class="quiz_icons">
                            <div class="icon float-left">
                                
                                                                <?php 
                                    if($quiz_array->price > 0)
                                    {
                                        echo '<span class=\'badge badge-warning text-premium\'><i class="far fa-money-bill-alt"></i>&nbsp;' . $quiz_array->price . '</span>';
                                        // $start_or_pay = lang('quiz_pay_now');
                                    }
                                    else
                                    {
                                        echo '<span class=\'badge badge-info\'><i class="far fa-bookmark"></i> Gratis</span>';
                                        // $start_or_pay = lang('start_quiz');
                                    }
                                    ?> 
                                   
                            </div>
                            <!--
                             <a href="/javascript:void(0)" class="icon float-left text-white-im"><i class="fe fe-eye mr-1"></i> 
                                <span class="value"><?php echo xss_clean($quiz_array->total_view);?></span></a>
                                
                                <a href="/javascript:void(0)" class="icon inline-block ml-3 float-right like-quiz text-white-im">
                                    <?php $like_or_not = (isset($quiz_array->like_id) && !empty($quiz_array->like_id) ? 'text-success' : 'text-muted');?>
                                    <i class="fav_icon fas fa-heart <?php echo xss_clean($like_or_not);?> text-white-im" data-quiz_id="<?php echo xss_clean($quiz_array->id);?>"></i> 
                                    <?php $total_like = (!empty($quiz_array->total_like) && $quiz_array->total_like > 0 ? $quiz_array->total_like : "");?>
                                    <span class="value like-quiz-count-<?php echo xss_clean($quiz_array->id);?>"><?php echo xss_clean($total_like);?></span>
                                </a> -->
                                
                                <a href="/" class="icon float-right text-white-im"><i class="fas fa-cart-arrow-down mr-1"></i> 
                                <span class="value"><?php echo $succeededpayment->num_rows(); ?></span></a>

                            </div>
                            <div class="framework-logo"> 
                                <p class="quiz_title"> <?php echo xss_clean($quiz_title); ?> </p> 
                                <div class="row quiz_middle_icon">
                                    <div class="col-6 text-center">
                                        <i class="fas fa-book-open"> </i> <br>
                                        <span class="value"><?php echo xss_clean($quiz_array->number_questions); ?> </span> <br>
                                        Files
                                    </div>

                                    <div class="col-6 text-center">
                                        <i class="fas fa-thumbs-up"></i>   <br>
                                        <span class="value"><?php echo xss_clean($total_like);?></span><br>
                                        Like
                                    </div>
                                </div>
                            </div> 

Quizmodel:

<?php defined('BASEPATH') OR exit('No direct script access allowed');
class QuizModel extends CI_Model 
{

    var $table = 'quizes';
    var $column_order = array(null, 'title', 'category_title', 'number_questions', 'duration_min' , NULL);
    var $column_search = array('title', 'category_title','number_questions','duration_min');
    var $order = array('quizes.id' => 'DESC');

    public function __construct() {
        parent::__construct();
        $this->load->database();
    }

    private function _get_datatables_query() {
        $this->db->from($this->table);
        $this->db->join('category', 'quizes.category_id = category.id', 'left');
        $this->db->join('users', 'users.id = quizes.user_id', 'left');
        $i = 0;
        foreach ($this->column_search as $item) {
            // if datatable send POST for search
            if ($_POST['search']['value']) {
                // first loop
                if ($i === 0) {
                    // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND.
                    $this->db->group_start();
                    $this->db->like($item, $_POST['search']['value']);
                } else {
                    $this->db->or_like($item, $_POST['search']['value']);
                }
                // last loop
                if (count($this->column_search) - 1 == $i) {
                    // close bracket
                    $this->db->group_end();
                }
            }
            $i++;
        }
        // here order processing
        if (isset($_POST['order'])) {
            $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
        } else if (isset($this->order)) {
            $order = $this->order;
            $this->db->order_by(key($order), $order[key($order) ]);
        }
    }

    function get_quiz() {
        $this->_get_datatables_query();  
        if ($_POST['length'] != - 1) 
            $this->db->limit($_POST['length'], $_POST['start']);
        $query = $this->db->select('quizes.*,category_title')
        ->order_by('quizes.id', 'desc')
        ->get();
        return $query->result();
        
    }
    
    function count_filtered() {
        $this->_get_datatables_query();
        $query = $this->db->get();
        return $query->num_rows();
    }
    
    public function count_all() {
        $this->db->from($this->table);
        return $this->db->count_all_results();
    }

Thank you good people for your help.


Solution

  • Right now, you're only getting the result once, for a single quiz with a hardcoded id, and then displaying that same result for all quizzes. You want to execute the query for each quiz separately using a different quiz_id.

    For that, you need to move this query block ...

    $this->db->where('payment_status', 'succeeded');
    $this->db->where('item_price', '50000.00');
    $this->db->where('quiz_id', 1);
    //$this->db->where('quiz_id', 116);
    $succeededpayment = $this->db->get('payments');
    

    ... to inside of the foreach loop, so that it is executed for each quiz. And then change $this->db->where('quiz_id', 1); to $this->db->where('quiz_id', $quiz_id); to get the result for the "current" quiz in the loop.

    The view then looks like this:

    <?php
    $quiz_running = 'no_quiz_start';
    $session_quiz_id = NULL;
    
    $gradients = array();
    $gradients[] = 'mask gradient-vue';
    $gradients[] = 'mask gradient-angular';
    $gradients[] = 'mask gradient-react';
    $gradients[] = 'mask gradient-material';
    $gradients[] = 'mask gradient-html';
    $gradients[] = 'mask gradient-laravel';
    $gradients[] = 'mask gradient-react-native';
    $gradients[] = 'mask gradient-nuxtjs';
    
    if($session_quiz_data && $session_quiz_question_data) 
    { 
        $quiz_running = 'quiz_running';
        $session_quiz_id = $session_quiz_data['id'];
        echo "<input type='hidden' value='".$session_quiz_id."' class='session_quiz_id'>";        
    }
    
    if($quiz_list_data)  
    {
        foreach ($quiz_list_data as  $quiz_array) 
        {
            $price = $quiz_array->price > 1 ? '₹ '.$quiz_array->price : ' '.lang('free');
            $start_quiz_link = $quiz_array->price > 1 ? '₹ '.$quiz_array->price : ' '.lang('free');
            $quiz_id = $quiz_array->id;
            $quiz_url = $session_quiz_id == $quiz_id ?  base_url("test/$session_quiz_id/1") : base_url("instruction/$quiz_id");
            $quiz_btn_name = $session_quiz_id == $quiz_id  ?  lang('resume_test') : lang("start_quiz");
            if($quiz_url !=  base_url("test/$session_quiz_id/1") && $quiz_array->price > 1)
            {
                $quiz_url = base_url("quiz-pay/payment-mode/$quiz_id");
                $quiz_btn_name = $quiz_btn_name != lang('resume_test') ? lang('pay_now') : $quiz_btn_name;
            }
            
            if($session_quiz_id == $quiz_id)
            {
    
                $quiz_running_btn = "";
            }
            else if($quiz_array->price > 1)
            {
                $quiz_running_btn = "";   
            }
            else if($quiz_array->is_registered  == 1)
            {
                $quiz_running_btn = "";   
            }
            else
            {
                $quiz_running_btn = $quiz_running;
            }
    
            $lang_id = get_language_data_by_language($this->session->userdata('language'));
            $translate_quiz_title = get_translated_column_value($lang_id,'quizes',$quiz_id,'title');
            $quiz_title = $translate_quiz_title ? $translate_quiz_title : $quiz_array->title;
            $quiz_title = strlen($quiz_title) > 40 ? substr($quiz_title,0,40)."..." : $quiz_title;
            $quiz_user_name = $quiz_array->first_name.' '.$quiz_array->last_name;
            $quiz_user_name = strlen($quiz_user_name) > 20 ? substr($quiz_user_name,0,20)."..." : $quiz_user_name;
    
            $this->db->where('payment_status', 'succeeded');
            $this->db->where('item_price', '50000.00');
            $this->db->where('quiz_id', $quiz_id);
            //$this->db->where('quiz_id', 116);
            $succeededpayment = $this->db->get('payments');
            
            ?>
            <div class="col-xs-6 col-sm-6 col-md-4 col-lg-3"> 
                <div class="card card-bundle" data-turbolinks="false"> 
                    <div class="thumbnail"> 
                        <span class="maskk gradient-defaultt <?php echo xss_clean($gradients[mt_rand(0,7)]); ?>"> </span> 
                        <a href="<?php echo xss_clean($quiz_url); ?>" data-url="<?php echo xss_clean($quiz_url); ?>" id="quiz_<?php echo xss_clean($quiz_array->id);?>" class="thumb-cover  <?php echo xss_clean($quiz_running_btn); ?> statrt_quiz_btn" data-quiz_id="<?php echo xss_clean($quiz_array->id);?>" data-toggle="tooltip"  title="<?php  echo lang('start_quiz');?>"> </a>
                        <div class="details card-dark-shadow"> 
                            <div class="quiz_icons">
                                <div class="icon float-left">
                                    
                                                                    <?php 
                                        if($quiz_array->price > 0)
                                        {
                                            echo '<span class=\'badge badge-warning text-premium\'><i class="far fa-money-bill-alt"></i>&nbsp;' . $quiz_array->price . '</span>';
                                            // $start_or_pay = lang('quiz_pay_now');
                                        }
                                        else
                                        {
                                            echo '<span class=\'badge badge-info\'><i class="far fa-bookmark"></i> Gratis</span>';
                                            // $start_or_pay = lang('start_quiz');
                                        }
                                        ?> 
                                       
                                </div>
                                <!--
                                 <a href="/javascript:void(0)" class="icon float-left text-white-im"><i class="fe fe-eye mr-1"></i> 
                                    <span class="value"><?php echo xss_clean($quiz_array->total_view);?></span></a>
                                    
                                    <a href="/javascript:void(0)" class="icon inline-block ml-3 float-right like-quiz text-white-im">
                                        <?php $like_or_not = (isset($quiz_array->like_id) && !empty($quiz_array->like_id) ? 'text-success' : 'text-muted');?>
                                        <i class="fav_icon fas fa-heart <?php echo xss_clean($like_or_not);?> text-white-im" data-quiz_id="<?php echo xss_clean($quiz_array->id);?>"></i> 
                                        <?php $total_like = (!empty($quiz_array->total_like) && $quiz_array->total_like > 0 ? $quiz_array->total_like : "");?>
                                        <span class="value like-quiz-count-<?php echo xss_clean($quiz_array->id);?>"><?php echo xss_clean($total_like);?></span>
                                    </a> -->
                                    
                                    <a href="/" class="icon float-right text-white-im"><i class="fas fa-cart-arrow-down mr-1"></i> 
                                    <span class="value"><?php echo $succeededpayment->num_rows(); ?></span></a>
    
                                </div>
                                <div class="framework-logo"> 
                                    <p class="quiz_title"> <?php echo xss_clean($quiz_title); ?> </p> 
                                    <div class="row quiz_middle_icon">
                                        <div class="col-6 text-center">
                                            <i class="fas fa-book-open"> </i> <br>
                                            <span class="value"><?php echo xss_clean($quiz_array->number_questions); ?> </span> <br>
                                            Files
                                        </div>
    
                                        <div class="col-6 text-center">
                                            <i class="fas fa-thumbs-up"></i>   <br>
                                            <span class="value"><?php echo xss_clean($total_like);?></span><br>
                                            Like
                                        </div>
                                    </div>
                                </div>