Главная | Блог статей | Как удалить дубли технических характеристик товаров в базе данных сайта?

Как удалить дубли технических характеристик товаров в базе данных сайта?

Всем доброго времени суток! Рассмотрим интересный момент. Некоторые владельцы интернет-магазинов, которые используют CMS 1С-Битрикс в качестве движка в большей степени, сталкиваются с проблемой дублирования технических характеристик на карточках товаров. И в большинстве случаев техническая поддержка Битрикса не в состоянии решить эти проблемы. Чаще всего нанимаются программисты из фриланса и они не знают что делать.

То есть, внешне характеристики не дублируются для пользователя сайта. Но когда владелец интернет-магазина хочет создать фильтр товаров по характеристикам, то появляется проблема с их дублями. Попытаемся разобраться в проблеме и дать алгоритм решения.


Клонирование собачек

Оглавление

Причины появления дублей в характеристиках

Шаг 1 – Извлечение данных из Data Base SQL в PHP

Шаг 2 – перенос значений дубля в первую характеристику

Шаг 3 - Удаление столбца дубля


Причины появления дублей в характеристиках


Программа 1С-Предприятие 8.3, при выгрузке товаров на сайт с помощью Битрикс, создает на сайте задублированную характеристику и присваивает ей новый символьный код. Если же этого не происходит, значит, сам программист или контент-менеджер где-то в админке сайта создал дубль и к нему присвоился новый символьный код.

Символьный код – это идентификатор характеристики на сайте или товара в 1С-Предприятие в виде КЭШа, похожего на MD-5.

Символьный код в 1С и на сайте

В базе данных SQL создается новое значение характеристики с новым идентификатором и на сайте тоже.

Дубликат характеристики Производитель

Попробуем дать алгоритм решения программистам для удаления дубликатов.


Шаг 1 – Извлечение данных из Data Base SQL в PHP


Первое, что нужно сделать – извлечь всю SQL-таблицу средствами PHP, написав примерно такой запрос.


SELECT * FROM ‘tablename’ WHERE 1


Откуда, ‘tablename’ – название вашей таблицы. У каждого оно свое. Средствами PHP-нужно из этого создать массив данных. Первое что надо сделать - подключиться к SQL-базе.


//Аутентификация

define(host, ‘localhost’);

define(user, ‘root’);

define(password, ‘qwerty’);

define(db, ‘mybaza’);

//Инициализация

$pusk = mysqli_connect(host, user, password, db);


Затем проверьте, подключились ли Вы к базе?


if(!$pusk) {

die('<p style="color:red">'.mysqli_connect_errno().' - '.mysqli_connect_error().'</p>');

}


Если все успешно, то пропишите параметры для извлечения из таблицы - идентификатор (id), характеристику (harakteristika) и ее дубль (harakteristika_double).


define(i, ‘id’);

define(j, ‘harakteristika’);

define(k, ‘harakteristika_double’);


Извлеките далее всю таблицу из базы данных средствами SQL и PHP.


$sql = mysqli_query($pusk, "SELECT * FROM `tablename` WHERE 1");


Создайте массив $array_table, где значения характеристик отделяются друг от друга символом |.


array_table = array();

$key = 0;

while($row = mysqli_fetch_array($sql)) {

$array_table[$key] = $row[i].'|'.$row[j].’|’.$row[k];

++$key;

}


В итоге у нас должен получиться такой массив данных в переменной $array_table.


1|Значение характеристики 1|Дубль значения характеристики 1

2|Значение характеристики 2|Дубль значения характеристики 2

N|Значение характеристики N|Дубль значения характеристики N


Важно! Если значение i-той характеристики не пустое, то значение ее дубля будет NULL. И наоборот, если значение дубля не пустое, то значение характеристики будет NULL.

На практике выглядит это так (например, ID|Назначение товара|Назначение товара):


1|для отопления|[пусто]

2|[пусто]|для ванной-комнаты

3|для кухни|[пусто]

N|[пусто]|для канализации


Решение этой проблемы – перенести значение дубля характеристики в тот столбец, где стоит оригинальная характеристика средствами языка запросов SQL и языка программирования PHP. При этом соблюдать, чтобы не пустые значения оригинальной характеристики не заменялись на NULL дубля.

И если оригинальная характеристика равна NULL, то ставится на ее место значение дубля.

После переноса дублей должно получиться так:


1|для отопления|[пусто]

2|для ванной-комнаты|[пусто]

3|для кухни|[пусто]

N|для канализации|[пусто]


На последнем этапе третий столбец нужно удалить.


Шаг 2 – перенос значений дубля в первую характеристику


Если значение дубля равно NULL, то значит оригинальная характеристика или забита значением, или этой характеристики в карточке товара не должно существовать. Такие значения мы пропускаем.

А вот если дубль не пустой, то наша задача перенести это значение в оригинальную характеристику.

Нам потребуется запрос в базу данных, который перепишет значение оригинала дублированной характеристикой.


UPDATE ‘tablename’

SET harakteristika = harakteristika_double

WHERE id = 1


Теперь давайте код на PHP напишем для переноса значений из дубля в оригинал.


for($i = 0; $i < count($array_table); ++$i) {

$razrez = explode(‘|’, $array_table[$i]);

if(strstr($razrez[2], null) != true) {

$sql2 = ‘UPDATE .tablename SET ’. j = “.$razrez[2].“ WHERE ” . i = .$razrez[0];

mysqli_query($pusk, $sql2); }

}


Шаг 3 - Удаление столбца дубля.


На третьем шаге рекомендуется удалить дубль. Для этого воспользуемся таким запросом.


ALTER TABLE mybaza.tablename DROP COLUMN .harakteristika_double


Все содержимое и само значение удалится из таблицы. Сделаем это средствами PHP и закроем соединение с базой.


mysqli_query($pusk, ‘ALTER TABLE mybaza.tablename DROP COLUMN .’.k);

@mysql_close($pusk);


Вот такой интересный алгоритм я предлагаю для решения проблем с дублями столбцов в базе SQL. В результате должна быть только одна характеристика в базе данных. Все значения дубля перенесены в оригинальную характеристику.

Цель, которую мы предследуем в статье - это попытка натолкнуть Вас на правильную мысль для того, чтобы решить задачу с дублями столбцов в SQL-таблице. У каждого по своему отыграется ситуация. Надеюсь, что Вы извлечете необходимые уроки для себя и найдете правильное решение.



Блог статей




Простой алгоритм для сокращения наименований для вайлдберриз и Авито






Прогноз трафика определенного поискового запроса на месяц вперед






Как бороться с ботами на сайте?






Пример парсинга курса валют - видео






Как удалить дубли технических характеристик товаров в базе данных сайта?






Парсинг карточек товаров и добавление их в Озон






Разбор парсинга сайта poizonshop






Создание текста для SEO-продвижения: верстка и стилистика






Как собрать смету по парсингу?






Вероятностный поиск по поисковой фразе