Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak pozwolić użytkownikowi wstawić dowolne miejsce na liście?

Najprostszą metodą z punktu widzenia kodu jest użycie stylu połączonej listy, w którym masz identyfikator następnego elementu, a nie wartość zamówienia. Jest to mniej przydatne w przypadku małych list, ale gdy zaczynasz zwiększać rozmiar listy, aktualizacje/przeniesienia/usunięcia są znacznie czystsze i zapobiegają ewentualnej aktualizacji tysięcy krotek w celu dokonania 1 zmiany kolejności.

++ Nie mam pod ręką dokładnego przykładu kodu, ale możesz zadzwonić do wszystkich list użytkowników

SELECT Posts.id, Posts.next, Posts.content, User.firstPost FROM db.posts AS Posts 
JOIN db.user as User ON Posts.ownerid = User.id 
WHERE User.id='123' AND Posts.active = 1;

W ten sposób uzyskasz wszystkie posty jednego użytkownika, a następnie otrzymasz pole zawierające identyfikator następnego posta. Aby rozpocząć, potrzebujesz klucza do identyfikacji pierwszego posta (zapisz identyfikator pierwszego posta w informacjach o użytkowniku). Po wyciągnięciu pierwszego posta łapiesz jego „następną” wartość i wykorzystujesz ją do identyfikacji następnego posta.

Wydaje się to trochę szalone w przypadku krótkiej listy, ale pomyśl o użytkowniku z 1000 postów. Jeśli muszą dodać 1 post na 2 pozycji. W tradycyjnym systemie porządkowania numerycznego należałoby teraz zaktualizować 999 innych wierszy za pomocą aktualizacji +1. Dzięki temu rozwiązaniu, jeśli chcesz wstawić post na drugiej pozycji, po prostu wysyłasz zapytanie do pierwszego posta, aby uzyskać jego następną wartość. Gdy już go masz, zmieniasz go na wartość nowego drugiego wpisu i ustawiasz następną wartość drugiego wpisu na tę, którą pierwotnie posiadał pierwszy.

[1st Post] --Next---> [2nd Post] --Next---> [3rd Post]

Po wstawieniu:

[1st Post] -.                          .--> [2nd Post] --Next---> [3rd Post]
            `--Next--> [New 2nd Post]--`



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Generowana jest tabela Hibernate_sequence

  2. Wybierz wartości zaczynające się od liczby

  3. Dodanie relacji jeden do wielu do rodzica/dziecka odnoszącego się do siebie

  4. php wstawia wiele wartości do oddzielnych wierszy w tabeli mysql

  5. SQL ANY &ALL Operatory