HooLIGUN 10 10/27/2023 07:52 AM Добрый день, подскажите пожалуйста, в чем может быть проблема в запросе? Делаю запрос 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>'; } Share this post Link to post
HooLIGUN 10 10/27/2023 08:09 AM При отключении 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'" ); } } Подскажите пожалуйста, как в итоге собрать запрос, чтобы он корректно работал и в дев и в рабочей версии ? 1 Share this post Link to post
Lesovsky 149 10/30/2023 01:08 PM Добрый день! Да, тоже сталкивался с этим, единственное что могу предложить (вставить выше вашего запроса): if ( \IPS\IN_DEV ) { \IPS\Db::i()->query("SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));"); } Тут не идёт речи о правильности или идеальности, каждый совет и рекомендация как побороть эту ошибку носит ограниченный характер, я лично на свой страх и риск выбрал такое. 1 Share this post Link to post