Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [MySQL][PHP][SQL]Usuwanie wszystkich rekordów poza 1 kolumną
Nidan23
post 1.07.2019, 14:08:05
Post #21





Grupa: Zarejestrowani
Postów: 94
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


Cytat(Tomplus @ 1.07.2019, 06:21:43 ) *
Za dużo kolumn, będzie za dużo ograniczeń.
Ale jeżeli to coś prostego, bez rozwoju na przyszłość. To wystarczy.


Jednakże, ani w jednej ani w drugiej tabeli nie masz ID rzędu.
W obydwóoch masz `nick` jako string, jak Ty chcesz zarządzać użytkownikami?

SELECT * FROM klandata WHERE nick = 'Nidan'?


Nope, SELECT * FROM klandata WHERE tag = '#RYJQPO', bo tag jest unikalny. Chociaż pomysł rozbicia tego na generalnie tabele tematyczne, np. ufarmione surowce etc nie jest głupie, hmmm
Go to the top of the page
+Quote Post
Tomplus
post 1.07.2019, 23:02:56
Post #22





Grupa: Zarejestrowani
Postów: 1 420
Pomógł: 166
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Właśnie, posługiwanie się ciągiem znaku do identyfikowania rekordów w tabeli rzadko jest dobrym pomysłem. Przy małych projektach jest to nieodczuwalne, ale przy dużych lepiej używać ID liczbowych.
Go to the top of the page
+Quote Post
com
post 2.07.2019, 08:01:50
Post #23





Grupa: Zarejestrowani
Postów: 2 964
Pomógł: 359
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


Niekoniecznie, dziś dużo systemów używa np UUID, ale taki krótki identyfikator faktycznie nie jest dobrym pomysłem bo pula ich jest ograniczona wink.gif


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 2.07.2019, 09:09:15
Post #24





Grupa: Zarejestrowani
Postów: 1 420
Pomógł: 166
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


To prawda że dużo systemów używa UUID, ale aby opierać identyfikatory na ciągach znaków to jest to bardziej przemyślane i takie zapytania muszą być szybkie. Jednakże stosowanie tego może zwolnić bazę danych. Bo aktualnie popularna baza danych MySQL nie do końca radzi sobie z takimi stringami.

Dlatego dla naszego kolegi to rozwiązanie może nie być efektywne, chociaż i tak lepsze niż ten dziwny tag.


Go to the top of the page
+Quote Post
com
post 2.07.2019, 10:07:15
Post #25





Grupa: Zarejestrowani
Postów: 2 964
Pomógł: 359
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


no tak, masz rację wink.gif


--------------------
Go to the top of the page
+Quote Post
Nidan23
post 2.07.2019, 10:35:00
Post #26





Grupa: Zarejestrowani
Postów: 94
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


Cytat(Tomplus @ 2.07.2019, 10:09:15 ) *
To prawda że dużo systemów używa UUID, ale aby opierać identyfikatory na ciągach znaków to jest to bardziej przemyślane i takie zapytania muszą być szybkie. Jednakże stosowanie tego może zwolnić bazę danych. Bo aktualnie popularna baza danych MySQL nie do końca radzi sobie z takimi stringami.

Dlatego dla naszego kolegi to rozwiązanie może nie być efektywne, chociaż i tak lepsze niż ten dziwny tag.


Ten dziwny tak to tylko przykład. Ja chętnie bym używał ID, jednak jest to całkowicie bezsensowne, ponieważ w klanie każdy na swoje miejsce, więc już mam liczbę a w dodatku pobieram informacje z API a lista graczy się zmienia, więc tag jest idealny + usuwanie rekordów opiera się na date(), więc kiedy aktualizacja jest różna od daty to usuwa i jest to na końcu, po zaktualizowaniu wszystkiego, więc nadanie Primary Key na 'miejsce' spowoduje błędy, a nawet bez Primary Key beda błędy, bo np. będą 2 rekordy z takim samym miejscem, to jak ma się aktualizować? A to pewnie zaburzy działanie skryptu usuwającego. Więc jak mówiłem, akurat to jest przemyślane.

Ten post edytował Nidan23 2.07.2019, 10:36:42
Go to the top of the page
+Quote Post
Tomplus
post 2.07.2019, 10:53:26
Post #27





Grupa: Zarejestrowani
Postów: 1 420
Pomógł: 166
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Każdy w klanie ma swoje miejsce?
- to każde miejsce ma swoje ID
- każdy gracz także ma swoje ID
- każdy klan ma także swoje ID
- jak ktoś ma miecz, albo worek ze złotem, to ten worek czy miecz także powinien mieć swoje ID...

Więc klan o ID:1 może mieć w ciągu tygodnia kilku graczy i pierwszy miał 1, ostatni może mieć już np. 34
każdy ma swój worek ze złotem, więc worek od ID:1 można przekazać do gracza o ID:1 albo 34. A może go wyrzucić/usunąć.
Nowy worek który gracz ID:1 kupi, zdobędzie będzie już miał inne id, kolejne unikalne.

W efekcie... opierasz się od ID dla każdego zbioru danych.


Jeżeli koniecznie potrzebujesz te tagi, to one też powinny mieć swoje ID:

ID:1 - TAG: HUASDS
ID:2 - TAG: SMESDS
...
Go to the top of the page
+Quote Post
Nidan23
post 2.07.2019, 11:10:41
Post #28





Grupa: Zarejestrowani
Postów: 94
Pomógł: 2
Dołączył: 26.04.2019

Ostrzeżenie: (10%)
X----


No dobra, będą mieć te ID i co mi po nich? Bo tabela klanu jest zmienna, raz ten jest 1, raz ten. Ale co mi da to, że każdy będzie mieć ID w tym przypadku? Cały skrypt aktualizacji jest w pętli i aktualizuje każdego pokolei według ich miejsca w klanie, które jak mówiłem jest zmienne, więc jedyną możliwościa identyfikacji rekordu jest tag, bo inne wymaga kombinacji.

PS. Żeby nie było, nie opieram się tam pomysłowi ID, bo tak, po prostu uważam to za zbędny bajer w tym przypadku, w tabeli użytkowników zarejestrowanych rzeczywiście mam takie coś, ale to jest już tabela powiedzmy "Kontrolowana", której aktualizacja odbywa się całkowicie manualnie i pobierany jest maksymalnie/aktualizowany jest max 1 rekord na raz. Nie używam tu zewnętrznych informacji i dla mnie tu ma to sens

Używanie tagu to najprostszy sposób na optymalizację zapytania, które nie może z resztą trwać dłużej niż minutę, bo wtedy usunie rekordy z datą inną niż obecna, a czasem w klanie jest 50 kont, więc no muszę stanąć przeciwko realiom...

Ten post edytował Nidan23 2.07.2019, 11:13:19
Go to the top of the page
+Quote Post
Tomplus
post 2.07.2019, 21:16:27
Post #29





Grupa: Zarejestrowani
Postów: 1 420
Pomógł: 166
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Czy wiesz, że to co robisz tym tagiem także jest identyfikatorem? Tylko że zamiast opierać o liczbę, opierasz o ciąg znaków.
Potem mówisz że szukasz optymalizacji zapytań smile.gif

Oczywiście przy małych bazach danych tego nie odczujesz, ale przy wiekszym ruchu już tak.

Go to the top of the page
+Quote Post

2 Stron V  < 1 2
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2019 - 18:18