У меня есть следующая ситуация. У нас есть множество категорий продуктов, для которых в настройках отображения установлен один атрибут - display_mode - со значением "static block only" и другой атрибут - is_anchor - со значением "yes". Проблема в том, что при использовании плагина shopby от amasty на страницах категорий в заголовке добавляются атрибуты link rel="next" и link rel="prev", но link rel="next" отображается на фронте только для тех категорий, где display_mode установлен как "static block only" и is_anchor - "yes", при наличии дочерних категорий с продуктами. Так как таких категорий очень много, вносить изменения вручную будет крайне утомительно. Я хочу узнать, возможно ли изменить все категории одновременно с помощью одного SQL-запроса, так как не совсем понимаю, как это сделать. Например, <a href="https://meetanshi.com/blog/set-anchor-to-yes-in-all-categories-in-magento-2/" rel="nofollow">в этом источнике</a> есть пример, как установить значение is_anchor для всех категорий. В этом примере attribute_id для is_anchor равен 51. Вот пример SQL-запросов: <pre><code class="sql">SELECT * FROM eav_attribute WHERE attribute_code = 'is_anchor'; UPDATE catalog_category_entity_int SET value = 0 WHERE attribute_id = 51;</code></pre> Однако attribute_id для display_mode равен 49, и этот атрибут хранится не в таблице catalog_category_entity_int, а в catalog_category_entity_varchar. Значение, соответствующее "static block only" - PAGE. Таким образом, я хотел бы составить запрос(запросы), который позволит мне получить все entity_id категорий, где attribute_id="49" имеет значение - value="PAGE" в таблице catalog_category_entity_varchar, и затем для этих entity_id установить значение - value="0" в таблице catalog_category_entity_int для соответствующего атрибута.
Чтобы изменить значения атрибутов `is_anchor` для всех категорий, у которых `display_mode` установлен на "static block only", вам придется использовать два SQL-запроса. Один запрос будет выбирать все нужные `entity_id`, а второй будет обновлять значение `is_anchor` для этих категорий. Вот пошаговое руководство: 1. Сначала вам нужно получить все `entity_id` категорий, где `display_mode` равно "static block only". Для этого выполните следующий запрос: ```sql SELECT cce.entity_id FROM catalog_category_entity_varchar AS ccev JOIN catalog_category_entity AS cce ON ccev.entity_id = cce.entity_id WHERE ccev.attribute_id = 49 -- display_mode AND ccev.value = 'PAGE'; ``` 2. Затем, используя полученные `entity_id`, вам нужно обновить значение атрибута `is_anchor` (если это значение равно 1 или `yes`), который хранится в таблице `catalog_category_entity_int`. Здесь мы будем устанавливать значение `is_anchor` на `0` для категорий, которые мы нашли на предыдущем шаге. Используйте следующий запрос для обновления: ```sql UPDATE catalog_category_entity_int SET value = 0 WHERE attribute_id = 51 -- is_anchor AND entity_id IN ( SELECT cce.entity_id FROM catalog_category_entity_varchar AS ccev JOIN catalog_category_entity AS cce ON ccev.entity_id = cce.entity_id WHERE ccev.attribute_id = 49 -- display_mode AND ccev.value = 'PAGE' ); ``` Объединяя оба вышеуказанных шага, вы сможете установить значение атрибута `is_anchor` для всех категорий, которые имеют `display_mode` равным "static block only". Пожалуйста, будьте осторожны при выполнении этих запросов, особенно на рабочей базе данных. Рекомендуется сначала протестировать их на резервной копии данных или в тестовом окружении.
UPDATE catalog_category_entity_int AS c SET c.value = 0 WHERE c.attribute_id = 51 AND EXISTS( SELECT * FROM catalog_category_entity_varchar AS e WHERE e.entity_id = c.entity_id AND e.attribute_id = 49 AND e.value = 'PAGE' )
Естественно, перед выполнением любых запросов на массовое изменение/удаление, не забудьте сделать бэкап базы.