Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
HooLIGUN

Проблема группировки в запросе

Рекомендованные сообщения

Добрый день, подскажите пожалуйста, в чем может быть проблема в запросе?

Делаю запрос

SELECT * FROM `rounds`  LEFT JOIN `matches` ON matches.match_id = rounds.match_id WHERE player_id=1 GROUP BY `rounds`.`match_id`

Таким образом (в файле расширения приложения)

$match_data = $match_connect->select
('*','rounds',array( 'player_id=?', 1 ), null,null,'rounds.match_id');
$match_data = $match_data->join( 'matches', 'matches.match_id = rounds.match_id', 'LEFT' );

в ответ выходит ошибка 

IPS \ Db \ Exception (1055)
'match.rounds.player_id' isn't in GROUP BY

Хотя при дебаге 

\file_put_contents( '/applications/appkey/logs'.'/test.log', "\n".print_r( $match_data , true )."\n\n" );

Запрос формируется корректно и нормально выполняется в стороннем клиенте Mysql

    [query] => SELECT * FROM `rounds`  LEFT JOIN `matches` ON matches.match_id = rounds.match_id WHERE player_id=? GROUP BY `rounds`.`match_id`
    [binds] => Array
        (
            [0] => 1
        )

 

Даже вне приложения, в тестовом файле запрос работает как надо

$match_data = $db_connect->select
('*', 'rounds',array( 'player_id=?', 1 ),null,null,'rounds.match_id');
$match_data = $match_data->join( 'matches', 'matches.match_id = rounds.match_id', 'LEFT' );

foreach ($match_data as $match)
{
  echo '<pre>';
  print_r($match);
  echo '</pre>';
}

 

Поделиться сообщением


Ссылка на сообщение

При отключении DEV режима, всё срабатывает. Так понимаю, это из-за этого в /system/Db/Db.php

		/* Enable strict mode for IN_DEV */
		if ( \IPS\IN_DEV )
		{
			if( $read AND $this->connectionDetails['readDatabase'] )
			{
				$this->reader->query( "SET sql_mode='STRICT_ALL_TABLES,ONLY_FULL_GROUP_BY,ANSI_QUOTES'" );
			}
			else
			{
				parent::query( "SET sql_mode='STRICT_ALL_TABLES,ONLY_FULL_GROUP_BY,ANSI_QUOTES'" );
			}
		}

Подскажите пожалуйста, как в итоге собрать запрос, чтобы он корректно работал и в дев и в рабочей версии ?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Добрый день!

Да, тоже сталкивался с этим, единственное что могу предложить (вставить выше вашего запроса):

        if ( \IPS\IN_DEV ) {
            \IPS\Db::i()->query("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));");
        }

Тут не идёт речи о правильности или идеальности, каждый совет и рекомендация как побороть эту ошибку носит ограниченный характер, я лично на свой страх и риск выбрал такое.

  • Like 1

Поделиться сообщением


Ссылка на сообщение

Спасибо за вариант решения!

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...