The SELECT would examine more than MAX_JOIN_SIZE rows

Ошибка при обновлении CMS Joomla "The SELECT would examine more than MAX_JOIN_SIZE rows"

В последнее время, у многих людей во время обновления CMS Joomla! начала появляться ошибка:

The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay

Данная ошибка не связана с CMS Joomla! Всё дело в настройках MySQL на сервере. И самостоятельно эти настройки вы не можете изменить.

Поэтому есть 3 варианта как можно избежать вышеупомянутой ошибки при обновлении CMS Joomla!:

  1. Позвоните в службу поддержки клиентов своей хостинговой компании и попросите изменить настройки MySQL, чтобы вы могли обновить свою CMS. В таком случае, как правило, вам дадут возможность обновить Joomla, а затем вернут настройки к тем, которые были до этого. Поэтому каждый раз перед обновлением CMS вам придётся связываться с техподдержкой. А это очень не удобно.
  2. Вы можете поменять хостинг-провайдера.
  3. Вы можете попытаться самостоятельно обойти эту ошибку.

О третьем пункте давайте поговорим более подробно.

В сети я нашел несколько вариантов как можно избежать возникновения ошибки "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay" при обновлении CMS Joomla!

Вариант 1. Внесение изменений в файл MysqliDriver.php

Найдите файл libraries\vendor\joomla\database\src\Mysqli\MysqliDriver.php

Приблизительно в строке 334 (действительно для Joomla 4.3.3) найдите:

$this->options['sqlModes'] = explode(',' , $this->setQuery('SELECT @@SESSION.sql_mode;')->loadResult());

Вставьте после этой строки следующий код:

mysqli_query($this->connection,"SET SQL_BIG_SELECTS = 1;" );

Вариант 2. Внесение изменений в файл MysqliDriver.php

Найдите файл libraries\vendor\joomla\database\src\Mysqli\MysqliDriver.php

Найдите код:

// If needed, set the sql modes.

if ($this->options['sqlModes'] !== [])

{

$this->connection->query('SET @@SESSION.sql_mode = \'' . implode(',', $this->options['sqlModes']) . '\';');

}

и поменяйте его на:

// If needed, set the sql modes.

if ($this->options['sqlModes'] !== [])

{

$this->connection->query('SET @@SESSION.sql_mode = \'' . implode(',', $this->options['sqlModes']) . '\';');

mysqli_query($this->connection,"SET SQL_BIG_SELECTS = 1;" );

}

Ссылка и дополнительная информация

Этот вопрос обсуждался как на форуме Joomla, так и во многих других сообществах. Вот некоторые, но не все ссылки, которые могут вам быть полезны:

Main Menu