2015-04-08 4 views
1

Я уже отвечал на вопрос по этому вопросу на другую должность, но я хочу, чтобы попытаться быть более конкретным здесьИмея проблему с помощью DataTable библиотеки с CodeIgniter

Так что я следующий запрос здесь с использованием CodeIgniter с библиотекой из https://github.com/IgnitedDatatables/Ignited-Datatables/wiki/Function-Reference

<?php 

public function GetQuery(){ 

$this->datatables->select('tablessc.Name As region,p.name As name,tabled.test As test, 
            MAX(CASE WHEN p.id= p.cid and flavor = 2 THEN \'Pass\' ELSE \'Fail\' end) as \'Pass\' 
            ') 
          ->from('drinks p'); 
          $this->datatables->join('tableb ', 'tableb.id=p.pid','inner'); 
          $this->datatables->join('tablec','tablec.TerritoryId=tablec.TerritoryId','inner'); 
          $this->datatables->join('tabled','tablec.AccountId=tablec.AccountId','inner'); 
          $this->datatables->join('tables','d.AccountId = tabless.AccountId ','inner'); 
          $this->datatables->join('tablessc','tablesc.Code = p.region and sc.CodeGroup =\'Region\'','inner'); 

          $this->datatables->where('region >','0'); 
          $this->datatables->where('p.location','0'); 

          $this->datatables->group_by('tablessc.Name'); 
          $this->datatables->group_by('p.id'); 
          $this->datatables->group_by('p.name'); 
          $this->datatables->group_by('atabled.test'); 

echo $this->datatables->generate(); 
} 
?> 

ИТАК, если я запускаю этот запрос на Microsoft SQL я не получаю сообщение об ошибке, и я получаю результаты, я хочу, но если я вызвать эту функцию со страницы, это даст мне ошибку

Error Number: 42000 

[Microsoft][SQL Server Native Client 10.0][SQL Server]Column 'drinks.region' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause 
SELECT * FROM drinks p INNER JOIN..... 

Просто для того, чтобы принять к сведению здесь, почему ошибка, показывающая, что sql делает выбор * Я попытался вывести функцию максимальной совокупности и по-прежнему совершать ту же ошибку. Единственный способ избавиться от этой ошибки - вывести агрегатную функцию MAX и предложение group by. Который не является вопросом, который я хочу. У кого-нибудь еще есть эта проблема с библиотекой? Спасибо

ответ

0

В SQL-сервере все столбцы, используемые в столбце select, должны появляться в предложении group_by, если столбец не используется в агрегированной функции.

Функция get_total_results в datatable library производит запрос «SELECT * FROM table_name GROUP_BY column_name». Поэтому столбец «drinks.region», который не был выбран в вашем запросе, отображается в сообщении об ошибке.

Как исправить попробуйте добавить

if(count($this->group_by) > 0) 
{ 

    $this->ci->db->select($this->columns); 
} 

внутри get_total_results() функции в Datatable.php подать

Смежные вопросы