/ / Pole przyrostowe liczby całkowitej o 1, począwszy od określonego wiersza - mysql, inkrementacja

Zwiększa całkowite pole o 1, zaczynając od określonego wiersza - mysql, inkrementacja

table1: id, pole1 (liczba całkowita), pole2, ...

jak pokazano powyżej field1 jest liczbą całkowitą, która jest serializowana od 1 do 100

Wprowadzam nowy rekord, w którym wartość pola 1 wynosi 45 z formularza php. biorąc pod uwagę, że ta wartość już istnieje w tabeli (od 1 do 100)

** Chcę, aby zapytanie zapisywało nowy rekord Przed istniejącym w tabeli i zwiększało wartości pola1 zaczynając od drugiego 45 **

Wielkie dzięki za pomoc!

Odpowiedzi:

0 dla odpowiedzi № 1

Polecam przeciw temu. Zwykle powinieneś wstawiać wiersze w dowolnej kolejności. Jeśli chcesz posortować, prawdopodobnie sortujesz według nazwy lub odpowiedniej wartości.

Jeśli chcesz z jakiegoś powodu mieć określoną kolejność sortowania, możesz to zrobić w dwóch instrukcjach aktualizacji:

1: Przesuń wszystkie wiersze, aby zrobić miejsce dla nowego wiersza.

UPDATE YourTable SET Field1 = Field1 + 1 WHERE Field1 >= 45

2: Wstaw nowy wiersz.

INSERT INTO YourTable (Field1) VALUES (45)

Jak możesz stwierdzić, może się to okazać nieefektywne, ponieważ faktycznie aktualizujesz wszystkie wiersze. Jeśli stolik się powiększy, wstawienie rzędów zajmie więcej czasu, szczególnie na początku.

Jeśli potrzebujesz, możesz zoptymalizować to trochę, dlaprzykład, zachowując odstępy między wierszami. Jeśli masz numerację w krokach co 100, możesz po prostu wstawić wiersz w 4450, między 4400 a 4500. Musisz tylko zmienić numerację, gdy nie ma przerwy między rekordami, w których chcesz wstawić nowy wiersz.


0 dla odpowiedzi nr 2

musisz uruchomić 2 sql jak mądry

$input_value = "45";
$sql1 = "UPDATE table1 SET field1=field1+1 WHERE field1>="$input_value" ";

$sql2 = "INSERT INTO table1 (field1, field2, ....) VALUES("$input_value", "$field2_value", ...); ";