2011-08-16 10 views
6

Używam php i mysql. Mam tabelę z kolumną id ustawioną na auto inkrementacji jako klucz podstawowy. Próbuję dodać kolejną kolumnę o nazwie sort_order. Kolumna sort_order powinna automatycznie zwiększać wartość po wstawieniu wiersza. Następnie użytkownik będzie mógł zmienić wartość sort_order. Ale mysql nie zezwala na auto inkrementację dla więcej niż jednej kolumny?wiele auto inkrementacji w mysql

Jaki jest najlepszy sposób automatycznego zwiększania wartości sort_order?

Według popularnego zamówienia, więcej wyjaśnień.

W obszarze administracyjnym użytkownik będzie miał listę kategorii. Korzystając z javascriptu, użytkownik może przeciągnąć kolejność, w jakiej chcą kategorie. Następnie skrypt wyświetla listę wszystkich identyfikatorów w nowej kolejności oraz wartości sort_order w starej kolejności.

Następnie mam funkcję php, która aktualizuje mysql o nową wartość sort_order.

Wszystko to już się stało, z wyjątkiem ręcznego wypełnienia wszystkich wartości sort_order. Chcę, aby była w stanie mieć wartość, gdy użytkownik tworzy nową kategorię.

Następnie mogę użyć sort_order do prawidłowego wyświetlania porządku kategorii z przodu.

Mam już wszystko. Ale w fazie rozwoju ręcznie wypełniłem wartości sort_order.

+0

Czy możesz powiedzieć nam coś więcej o tym, jak zamierzasz używać kolumny "sort_order"? –

+2

Do czego dokładnie potrzebujesz drugiej kolumny auto_increment? Nie rozumiem rozumowania stojącego za tym. – pkk

+0

Jeśli możesz szczegółowo opisać użycie, możemy zaproponować lepszą alternatywę. – ThinkCode

Odpowiedz

1

Można użyć trigger zaktualizować wiersz na wkładkę, lub wybrać odpowiednią wartość w kodzie PHP w czasie kwerendy jest produkowany.

Należy jednak zastanowić się, czy naprawdę trzeba utworzyć automatycznie zwiększającą się wartość sort_order. W kodzie wyświetlania możesz sortować elementy, którym nadano wyraźną kolejność sortowania, a pozostałe nieposortowane elementy umieścić w odpowiednim miejscu (na dole?) Na liście.

7

Możesz zostawić kolumnę sortowania równą NULL domyślnie. Jedyne, czego potrzebujesz, to trochę mądrzejsza kwerenda. Na przykład:

select * 
from something 
order by ifnull(sort, id) 
0

Możesz przechowywać 0 w sort_order, a następnie sortować przez sort_order + id. Wyniki będą takie same, ponieważ sort_order będzie dokładnie 0 zamiast id (mniej na id)

1

Może dodać sygnaturę czasową i posortować na tym, co w rzeczywistości dodaje znaczenia do Twojego modelu danych. Kolumna "sort_order" oznacza, że ​​wprowadzasz logikę prezentacji (widoku) do swojego modelu danych, co jest Bad Thing.

+0

Zależy od rzeczywistego użycia, ale czasami kolejność sortowania jest faktycznie częścią modelu danych imo. Rozważ galerię. Tak, kolejność sortowania jest związana z prezentacją, ale jest również częścią modelu, ponieważ kolejność prezentacji jest zarówno arbitralna, jak i ważna dla całej galerii. Nie można po prostu użyć klucza podstawowego ani znacznika czasu, ponieważ te wartości mają być statyczne. W takiej sytuacji klucz sortowania ma sens. – pzuraq

Powiązane problemy