Matt23
22.07.2014, 17:44:17
Witam zebranych,
chciałbym się dowiedzieć w jaki sposób zrobić update do bazy, aby zmienić ID wszystkim rekordom by owe ID było względem siebie rosnące.
Sprawa wygląda tak, że mam straszne luki w tym id i chciałbym je pozmieniać na rosnące liczby. Jakim poleceniem mogę to zrobić?
Aktualnie mam
ID TABELA
21 Andrzej
47 Grzegorz
67 Anna
Chciałbym to zmienić na
1 Andrzej
2 Grzegorz
3 Anna
mmmmmmm
22.07.2014, 17:56:06
Po co? ID is ID - nie zmienia się.
Matt23
22.07.2014, 17:58:24
W formie zdobywania doświadczenia może być?
pedro84
22.07.2014, 18:36:27
Ale to jest totalnie bezsensu. Chcesz sobie numerować to sobie numeruj w pętli. A do zdobywania doświadczenia Ci się to nie przyda.
Sam update robisz za pomocą UPDATE.
Matt23
22.07.2014, 18:39:46
Ale nie wiem jak sie za to zabrać. Jestem wstanie wygenerować sobie w pętli określona ilość numerów, ale jak skonstruować zapytanie?
pedro84
22.07.2014, 18:42:05
W pętli masz jakiś index a przy przebiegu pętli zwiększasz jego wartość o jeden. Reszta to podstawowe zapytanie UPDATE, ale podkreślam, tak się nie robi w żaden sposób.
SmokAnalog
22.07.2014, 19:04:50
Kiedyś też chciałem łatać luki w identyfikatorach i robiłem to tak (przykład na przestarzałych funkcjach mysql_):
$query = mysql_query('SELECT `id` FROM `tabela` ORDER BY `id` ASC'); if ($id !== (int) $row['id']) {
mysql_query('UPDATE `tabela` SET `id` = ' . (int
) $i . ' WHERE `id` = ' . (int
) $row['id']); }
}
Dzięki ORDER BY `id` ASC nie zrobi się bałagan, bo nadpisujesz zawsze identyfikatory większe lub równe aktualnej zmiennej iteracyjnej.
Ale jak koledzy wyżej wspomnieli, łatanie dziur nie ma sensu

Klucz podstawowy jest z definicji wartością bez żadnej wartości informacyjnej, a luki przynajmniej przypominają nam, że coś usuwaliśmy
Matt23
22.07.2014, 19:17:35
Jest jeszcze lepiej niż było, pojawiło sie id 0 i między wierszami zgubiły się liczby
trueblue
22.07.2014, 19:20:16
Dodaj nową kolumnę, np. pole.
UPDATE tabela,(SELECT @id:=0) AS tmp SET pole=(SELECT @id:=@id+1)
Usuń id, zmień pole na id.
Możesz też update'ować samą siebie jeśli masz pewność, że nie nastąpi kolizja (jeśli pole to klucz lub ma indeks unique).
Matt23
22.07.2014, 19:37:18
Użyłem tego zapytania i niby coś się zrobiło, ale nie mogę posortować rekordów względem kolumny `pole`. Podczas sortowania nie zachowuje kolejności rosnącej/malejącej. Przy czym z tego co widzę, to nowa nuemracja nie zachowała starej kolejności, jest na to sposób?
SmokAnalog
22.07.2014, 20:00:47
Pisałem z palca w jednym miejscu zrobiłem $i zamiast $id. Popraw to i spróbuj.
Matt23
22.07.2014, 20:33:11
Z problemami, ale jakoś poszło rozwiązanie Smoka, dziękuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.