Cześć. Sprawa wygląda następująco. Posiadam pewną tabelę. Znajduje się w niej kolumna, która jest ustawiona jako unique. Znajdują się w niej liczby od 1 do X. Ta kolumna służy mi do tego aby sortować na stronie WWW ręcznie rekordy z tej tabeli.
Mam napisaną taką funkcjonalność, która umożliwia usuwanie danych z tej tabeli. Jeśli usuwam rekord, który w kolumnie z sortowaniem miał wartość na przykład 6, chcą aby kolumny z wartością > 6 zmniejszyły się o 1 aby zachować spójność w sortowaniu.
W tym celu wykonuję takie zapytania:
$db->query("START TRANSACTION") or die($db->error);
$q1 = $db->query("DELETE FROM objects WHERE object_id = '".$id."'") or die($db->error);
$q2 = $db->query("UPDATE objects SET object_order = object_order - 1 WHERE object_order > '".$order."'") or die($db->error);
if($q1 && $q2) {
$db->query("COMMIT") or die($db->error);
} else {
$db->query("ROLLBACK") or die($db->error);
}
Niestety. Pierwsze zapytanie dostaje wartość true, drugie wywala błąd "Duplicate entry for key ...". Zmienna $order ma prawidłową wartość więc problem leży w bazie danych. Oczywiście sprawdziłem zawartość tej kolumny i nie występuje żaden duplikat.
Zapytanie "UPDATE cms_objects SET object_order = object_order - 1" użyte w phpMyAdmin wyrzuca taki sam błąd.
Co robię nie tak? Nie da się tak zmniejszać kolumny, która ma indeks Unique?