Wpis z mikrobloga

Problem. Baza danych.

id, tresc, kolejnosc
[1, aaa, 1]
[2, bbb, 2]
[3, ccc, 3]

Chce wyswietlac dane wg pola "kolejnosc". Chce móc modyfikować kolejność wierszy poprzez pole "kolejnosc".

przyklad. => "przesun wiersz o Id 2, ponad wiersz, który jest nad nim"

wynik:
[1, aaa, 1]
[3, ccc, 2]
[2, bbb, 3]

Macie pomysł jak to rozwiązać? Co w przypadku, gdy usunę jakiś wiersz, bądź też dodam kolejny?

myślałem o prostej metodzie, tzn UPDATE kolejnosc +/-1 w zależności od tego czy chcę żeby wiersz był niżej, albo wyżej, ale wtedy można dodawać sobie w nieskończoność i porobić "długie przerwy" między wierszami, co w wyświetlaniu nie sprawi problemu, jednak w późniejszym przesunięciu innego wiersza już tak. Kolejny problem, to to że nowe wiersze będą wstawiane w losowym miejscu (no chyba, ze jakiś max(kolejnosc)..).

Przerosło mnie na dzis to zadanie, moze jakies sugestie..?

#mysql #sql
#php
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

a i tak na koniec zostaniesz ze skryptem który będzie za każdym razem nadpisywał kolejność całości :)
  • Odpowiedz
  • 0
@van: @Diabl0: powiedzmy, ze rozumiem idee przesuwania. Teraz chciałbym usunąć jakiś wiersz. Zakładając ze sortuje po polu kolejność desc, to musze wszystkie wiersze o polu kolejność większym od pola rekordu usiekanego pomniejszyć o wartość 1. Myśle o pętli, która to wykona, czyli pobieram większe od mojego usuwanego, i zmniejszam o 1 pole pozycja. Co aby zrobić to tylko raz?( bo jak ustawie warunek ze większe od mojego pola
  • Odpowiedz
@Diabl0: jestem dopiero na etapie dziergania,

poki co męczę kolejnosc w gore ;)
kolejnosc w jakiej maja byc wyswietlone elementy to bedzie kolejnosc desc;

nie potrafiłem tego zbudować w jednym zapytaniu, i robie
  • Odpowiedz
nie wiem czemu wkop tak dziwnie ucina kod:

$zapyup1 = mysqlquery("select * from Tabela where id=$id");
$rekordup1 =
  • Odpowiedz
@mgmgmg: Jeśli chcesz przesunąć o jeden w górę/dół to wystarczy tylko zamienić kolejność pomiędzy rekordami, czyli
update tabela set kolejnosc = (kolejność elementu wyzszego) where id = (id elementu przesuwanego w gore)
update tabela set kolejnosc = (kolejność elementu niższego) where id = (id elementu przesuwanego w dol)

przykłady z update tabela set kolejnosc.= kolejnosc +/- 1 where kolejnosc dotyczyła dodawania/usuwania rekordów
  • Odpowiedz
  • 0
@Diabl0: No jeśli w drugim update pobieram kolejność niższego (który po wcześniejszym zapytaniu jest juz wyżej) to mi da 2 takie same wartości kolejności
  • Odpowiedz
@Diabl0: dzięki :) trochę namieszałem ze znakami równości, stąd moje błędy. Teraz miałem chwilkę, napisałem, przetestowałem, działa, poniżej gotowy kod zmiany kolejności rekordu, może ktoś skorzysta, albo ewentualnie jakieś sugestie optymalizacji ;)

php

//kolejnosc rekordu w
  • Odpowiedz