2017-10-13 5 views
1

マイエラーメッセージ: データベースエラーはなぜ、このようなエラーがあると、それを排除する方法をcodeigniterプロジェクトのエラーを修正するには? CodeIgniterのフレームワークで

Error Number: 1140 

In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'hms.rooms.id'; this is incompatible with sql_mode=only_full_group_by 

SELECT `rooms`.*, count(room_no) as total_rooms FROM `rooms` WHERE `room_type_id` = '10' 

Filename: D:/Installed_Apps/OpenServer/OpenServer/domains/hms.loc/system/database/DB_driver.php 

Line Number: 691 

を発生しましたか?コードに何が問題になるのでしょうか?

これらの機能では、何かが間違っているか、すべて正常ですか?

function check_availability($ check_in、$ check_out、$大人、$子供、$ room_type_id){ $ query = '?date_from ='。$ check_in。 ' & date_to = '。$ check_out。' &大人= '。$大人' & kids = '。$ kids。' & room_type = '; $ CI = & get_instance(); if($ check_in == $ check_out){ $ check_out = date( 'Y-m-d'、strtotime($ check_out。 '+ 1 day'));

          $CI->db->where('id',1); 
        $settings = $CI->db->get('settings')->row_array(); 

             $CI->db->where('id',$room_type_id); 
             $CI->db->select('room_types.*,base_price as price'); 
        $room_type = $CI->db->get('room_types')->row_array(); 
        //echo '<pre>'; print_r($room_type);die; 

             $CI->db->where('room_type_id',$room_type_id); 
             $CI->db->select('rooms.*,count(room_no) as total_rooms'); 
        $rooms  = $CI->db->get('rooms')->row_array(); 
        $total_rooms = $rooms['total_rooms']; 
        //echo '<pre>'; print_r($rooms);die; 
        $begin = new DateTime($check_in); 
        $end = new DateTime($check_out); 

        $interval = DateInterval::createFromDateString('1 day'); 
        $period = new DatePeriod($begin, $interval, $end); 

        foreach($period as $dt){ 
         $date  = $dt->format("Y-m-d");  
         $dayno  = $dt->format("N"); 
         $day  = $dt->format("D"); 
         $day  = strtolower($day); 
         ///echo $date;die;   
         //check for room block period 

         if($date >= $settings['room_block_start_date'] && $date <=$settings['room_block_end_date']) 
         { 
          $block_message = "Sorry.. No Room Available Between ".date('d/m/Y',strtotime($settings['room_block_start_date']))." to ".date('d/m/Y',strtotime($settings['room_block_end_date']))." "; 
          $CI->session->set_flashdata('error', $block_message); 
          redirect(''); 

         } 
             $CI->db->where('O.room_type_id',$room_type_id); 
             $CI->db->where('R.date',$date); 
             $CI->db->select('R.*,'); 
             $CI->db->join('orders O', 'O.id = R.order_id', 'LEFT'); 
         $orders  = $CI->db->get('rel_orders_prices R')->result_array(); 
         //echo '<pre>'; print_r($orders);die; 
         //echo $total_rooms;die; 
         if($total_rooms > 0){ 
          //echo count($orders);die; 
          if(count($orders) >= $total_rooms){ 
           $CI->session->unset_userdata('booking_data'); 
           $CI->session->unset_userdata('coupon_data'); 
           $CI->session->set_flashdata('error', "Sorry.. This Dates Between Rooms Not Available Please Try With Another Date Or Room"); 
           redirect('front/book/index'.$query); 
          }else{ 
           continue; // continue loop 
          } 
         }else{ 
           $CI->session->unset_userdata('booking_data'); 
           $CI->session->unset_userdata('coupon_data'); 
           $CI->session->set_flashdata('error', "Sorry.. This Dates Between Rooms Not Available Please Try With Another Date Or Room"); 
           redirect('front/book/index'.$query); 
         } 
        } 

    return; 
} 

function check_availability_ajax($check_in,$check_out,$adults,$kids,$room_type_id){ 
       $query  = '?date_from='.$check_in.'&date_to='.$check_out.'&adults='.$adults.'&kids='.$kids.'&room_type='; 
       $CI =& get_instance(); 
       if($check_in==$check_out){ 
        $check_out = date('Y-m-d', strtotime($check_out.'+ 1 day')); 
       } 
             $CI->db->where('id',1); 
        $settings = $CI->db->get('settings')->row_array(); 

             $CI->db->where('id',$room_type_id); 
             $CI->db->select('room_types.*,base_price as price'); 
        $room_type = $CI->db->get('room_types')->row_array(); 
        //echo '<pre>'; print_r($room_type);die; 

             $CI->db->where('room_type_id',$room_type_id); 
             $CI->db->select('rooms.*,count(room_no) as total_rooms'); 
        $rooms  = $CI->db->get('rooms')->row_array(); 
        $total_rooms = $rooms['total_rooms']; 
        //echo '<pre>'; print_r($rooms);die; 
        $begin = new DateTime($check_in); 
        $end = new DateTime($check_out); 

        $interval = DateInterval::createFromDateString('1 day'); 
        $period = new DatePeriod($begin, $interval, $end); 

        foreach($period as $dt){ 
         $date  = $dt->format("Y-m-d");  
         $dayno  = $dt->format("N"); 
         $day  = $dt->format("D"); 
         $day  = strtolower($day); 

         if($date >= $settings['room_block_start_date'] && $date <=$settings['room_block_end_date']) 
         { 
          $block_message = "Sorry.. No Room Available Between ".date('d/m/Y',strtotime($settings['room_block_start_date']))." to ".date('d/m/Y',strtotime($settings['room_block_end_date']))." "; 
          return $block_message; 


         } 

             $CI->db->where('O.room_type_id',$room_type_id); 
             $CI->db->where('R.date',$date); 
             $CI->db->select('R.*,'); 
             $CI->db->join('orders O', 'O.id = R.order_id', 'LEFT'); 
        $orders  = $CI->db->get('rel_orders_prices R')->result_array(); 
         //echo $total_rooms;die; 
         if($total_rooms > 0){ 
          if(count($orders) > $total_rooms){ 
           $CI->session->unset_userdata('booking_data'); 
           $CI->session->unset_userdata('coupon_data'); 
           return 'Sorry.. This Dates Between Rooms Not Available Please Try With Another Date Or Room'; 
          }else{ 
           continue; // continue loop 
          } 
         }else{ 
           $CI->session->unset_userdata('booking_data'); 
           $CI->session->unset_userdata('coupon_data'); 
           return 'Sorry.. This Dates Between Rooms Not Available Please Try With Another Date Or Room'; 
         } 
        } 

    return 1; 
} 

}

ここで私は関数があることを使用私のBook.phpコントローラコードです: COUNT()または SUM()などのような集計関数を含む

function index() 
{ 
    //echo '<pre>'; print_r($_GET); 
    //check availbilty 
    //get_invoice_number(); 
    $this->session->unset_userdata('booking_data'); 
    $this->session->unset_userdata('coupon_data'); 
    $data['page_title']  = lang('make_reservation'); 
    $data['meta_description'] = $this->setting->meta_description; 
    $data['meta_keywords']  = $this->setting->meta_keywords; 
    $data['banners']  = $this->homepage_model->get_banners(); 
    $data['testimonials'] = $this->homepage_model->get_testimonials(); // get 6 testimonials 
    $data['room_types']  = $this->homepage_model->get_room_types_all(); 
    $data['taxes']   = $this->homepage_model->get_taxes(); 
     if(!empty($_GET['room_type'])){ 
      $data['services']   = $this->homepage_model->get_paid_services($_GET['room_type']); 
     } 
     //echo '<pre>'; print_r($data['services']); 
    if(empty($_GET['room_type'])){ 
     $this->render('book/room_types', $data);   
    }else{ 
     check_availability($_GET['date_from'],$_GET['date_to'],$_GET['adults'],$_GET['kids'],$_GET['room_type']); 

     $data['room_type']  = $this->homepage_model->get_room_type($_GET['room_type']); 

     $this->render('book/view', $data);  
    } 


} 
+0

実際のエラーが発生したコードを表示します。 – shahsani

+0

行691? @ shahsani – John

+0

Lol、そしてどこに行691がありますか?とにかくクエリで 'GROUP BY'式を指定する必要があります – shahsani

答えて

2

あなたはこの問題を解決するために、理由はとても親切にしMYSQLでONLY_FULL_GROUP_BYオプションの

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

をこの問題に直面しています。

1

SQLクエリは常にそれでGROUP BY句を持っています。これは、最終結果セットのグループ化されていない他の列を指定します。あなたに

には、以下の発言を照会指摘されています

  1. あなたがグループ化しながら、推奨されませんrooms.*を指定しました。
  2. グループ化中に特定の列を指定し、その列をGROUP BY節に指定することもできます。たとえば、

SELECT 
    Count(product_tb.product_id), 
    product_tb.`name`, 
    product_tb.details 
FROM 
    `product_tb` 
WHERE 
product_tb.product_id = 1 
GROUP BY 
    product_tb.`name`, 
    product_tb.details 
+0

私の質問を変更していくつかの関数を追加しました – John

関連する問題