В последнее время, у многих людей во время обновления 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!:
- Позвоните в службу поддержки клиентов своей хостинговой компании и попросите изменить настройки MySQL, чтобы вы могли обновить свою CMS. В таком случае, как правило, вам дадут возможность обновить Joomla, а затем вернут настройки к тем, которые были до этого. Поэтому каждый раз перед обновлением CMS вам придётся связываться с техподдержкой. А это очень не удобно.
- Вы можете поменять хостинг-провайдера.
- Вы можете попытаться самостоятельно обойти эту ошибку.
О третьем пункте давайте поговорим более подробно.
В сети я нашел несколько вариантов как можно избежать возникновения ошибки "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;" );
Важно!
В ходе обновления CMS, файл MysqliDriver.php будет перезаписан. Поэтому, перед следующим обновлением Joomla, вам снова придется вносить изменения в этот файл.
Вариант 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;" );
}
Важно!
В ходе обновления CMS, файл MysqliDriver.php будет перезаписан. Поэтому, перед следующим обновлением Joomla, вам снова придется вносить изменения в этот файл.
Ссылка и дополнительная информация
Этот вопрос обсуждался как на форуме Joomla, так и во многих других сообществах. Вот некоторые, но не все ссылки, которые могут вам быть полезны:
- Обсуждение, включая решение выше: https://forum.joomla.org/viewtopic.php?f=811&t=995872
- Проблема в том, что новая версия возвращает отредактированный файл: https://forum.joomla.org/viewtopic.php?f=9&t=1002685
- Ожидают рассмотрения в системе отслеживания проблем: https://issues.joomla.org/tracker/joomla-cms/17679
- База знаний MariaDB: https://mariadb.com/kb/en/server-system-variables/#max_join_size (проблема решена)
