Останнім часом, у багатьох людей, під час оновлення 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 (проблема вирішена)
