Задача реализовать поиск по бд и нахождение повторов , но удалять нужно не все повторы , а только те дубликаты которые лежат в 1 категории.
p2.txt:
8557;360 г;299
8558;Рогалик;344
8559;Рогалик;344
8560;Батон;344
8561;Батон;344
8562;Батон;340
8563;Батон;340
8564;Intersnack;347
8565;Intersnack;347
8566;Повна Чаша;347
8567;Повна Чаша;347
8568;Булочка;344
8569;Булочка;344
<code lang="php">
<?php
class create
{
public function getContent($file)
{
$lines = file_get_contents($file);
$data = explode(PHP_EOL, $lines);
return $data;
}
public function connect()
{
$params = parse_ini_file('config.ini');
if (!is_array($params)) {
throw new Exception("Error #1");
} else {
$db = new PDO($params['db.conn'], $params['db.user'], $params['db.pass']);
}
return $db;
}
public function suit()
{
$db = $this->connect();
$con = $this->getContent('p2.txt');
for ($i = 0; count($con) > $i; $i++) {
$correct = explode(";", $con[$i]);
for ($a = 0; count($con) > $a; $a++) {
$correct2 = explode(";", $con[$a]);
if ($correct[0] !== $correct2[0] && $correct[1] == $correct2[1] && $correct[2] == $correct2[2]) {
$sql_update = "UPDATE ps_feature_product
SET id_feature_value = :id_correct
where id_feature_value = :id_fc and id_feature = :id_f";
$result = $db->prepare($sql_update);
$result->execute(
[
':id_fc' => $correct2[0],
':id_f' => $correct2[2],
':id_correct' => $correct[0]
]
);
$sql_delete = "DELETE
FROM ps_feature_value_lang
WHERE ps_feature_value_lang.id_feature_value = :id_f
AND ps_feature_value_lang.id_lang = 1";
$result = $db->prepare($sql_delete);
$result->execute(
[
':id_f' => $correct2[0],
]
);
}
}
}
}
}
$cr = new create;
$cn2 = $cr->connect();
$cr->suit();</code>
проблема: удаляет не 1 повтор, а все(т.е. и сам себя).
Это свойство прикриплено к товару, например Рогалик марки Повна Чаша например, т.е мне нужно обязателно сохранить 1 свойство убрав дубликаты и перебрать, если у дубликата товары прекреплины то поменять на id главного(тот который мы оставим главным из всех дублей). И затем только удаляем дубли. Сначало update потом delete.