2015-04-22 17 views
6

Tak, mam tabelę, która zawiera 3 kolumny: ID, Nazwa i ParentID. Coś takiego:Jak przenieść wiersze w mysql

ID | Name | ParentID 
1  Root  NULL 
2 Parent #1  1 
3 Parent #1  1 
4 Parent #1  1 
5 Parent #1  1 
6 Child #1  2 
7 Child #1  2 
8 Child #1  3 
9 Child #1  4 
10 Child #1  5 
11 Child #1  5 

Po pewnym manipulowaniu wierszami przez użytkownika, Ajax wysyła tablicę z nową kolejnością wierszy według ich identyfikatorów. Na przykład może to być 4, 10, 2, 3, 11, 1 itd.

Pytanie brzmi: z jakich zapytań/zapytań mogę korzystać, aby zmienić kolejność wierszy w mojej tabeli? Więc mam tylko numer wiersza i nic więcej. I muszę przenieść wszystkie dane wiersza: z nazwą i ParentID (nie tylko ID). Chcę uzyskać coś takiego:

ID | Name | ParentID 
1  Root  NULL 
9 Child #1  4 
5 Parent #1  1 
2 Parent #1  1 
3 Parent #1  1 
6 Child #1  2 
7 Child #1  2 
8 Child #1  3 
2 Parent #1  1 
10 Child #1  5 
11 Child #1  5 

Wielkie dzięki.

+5

zachować szczególną Columa nazwie jako priorytet i na wszystkich ajax ognia czasu aktualizować swój priorytet Columa, sprowadzaniu kolejność danych według priorytetu colum – Priyank

+0

Nie rozumiem kolejności na twojej drugiej liście. Czy możesz wyjaśnić to nieco dalej? Dlaczego ten z identyfikatorem = 2 prawie na samym dole? – Peanut

+0

@ Priyank57, może powinieneś opublikować to jako odpowiedź, bo może to zrobić zamiast tego –

Odpowiedz

2

Moim zdaniem, nie można tego zrobić bez konieczności dodatkowej kolumny order

Trzeba będzie utworzyć nową kolumnę order do tego celu.

Następnie zaktualizuj tabelę w momencie przekazania tablicy.

foreach($passed_array as $order => $val){ 
$q = "Update table SET `order` = $order WHERE ID = $val"; 
// run query here 
} 

EDIT

A kiedy wyświetlania danych na frontend, wybierz zapytanie będzie jak

"SELECT * FROM table `Order` BY `order` ASC" 
+0

Powiedz mi jeszcze coś: jeśli zapiszę porządek jak na drugiej liście, użytkownik zobaczy elementy w kolejności , np .: 1, 9, 5, 2 itd. Czy nie ma różnicy między tymi dwoma listami i dane będą wyświetlane zawsze od pierwszego do ostatniego identyfikatora? Dzięki. –

+0

@TurakVladyslav zobacz zmiany .... Zawsze, gdy wyświetlasz dane w dowolnym miejscu, dodaj 'order by order_kolumn' w zapytaniu – Umair

+0

Wielkie dzięki. Zrozumiałem. –

0

Myślę, że powinieneś utworzyć nową kolumnę bazy danych (weight, na przykład typu INTEGER), która będzie określała kolejność Twoich wierszy. To powinno być najbardziej optymalne rozwiązanie.

Powiązane problemy