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 14.06.2019, 19:33:02
Post #1





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

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


Czy jest jakakolwiek opcja, żeby usunąć wszystko z tabeli poza 1 kolumną?
Go to the top of the page
+Quote Post
Tomplus
post 14.06.2019, 22:07:41
Post #2





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

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


Ogarnij jeszcze raz pytanie. Bo ja do końca nie rozumiem czy chodzi ci o kolumny tabeli MySQL czy o wiersze?
Go to the top of the page
+Quote Post
Nidan23
post 15.06.2019, 11:07:01
Post #3





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

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


Cytat(Tomplus @ 14.06.2019, 23:07:41 ) *
Ogarnij jeszcze raz pytanie. Bo ja do końca nie rozumiem czy chodzi ci o kolumny tabeli MySQL czy o wiersze?



Wybacz, źle opisałem, usunąć wszystkie wiersze z tabeli, poza ich zawartością w jednej kolumnie
Go to the top of the page
+Quote Post
Tomplus
post 15.06.2019, 12:02:50
Post #4





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

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


Czyli nie chcesz usuwać wierszy, tylko wyczyścić wartości.

  1. UPDATE tabela SET value=NULL, valueX = NULL, valueY = NULL;
Go to the top of the page
+Quote Post
dublinka
post 15.06.2019, 12:36:22
Post #5





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(Nidan23 @ 14.06.2019, 19:33:02 ) *
Czy jest jakakolwiek opcja, żeby usunąć wszystko z tabeli poza 1 kolumną?


Jak czytam Twoje posty to mnie 'czepie'


--------------------
Go to the top of the page
+Quote Post
Nidan23
post 15.06.2019, 13:23:47
Post #6





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

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


Cytat(Tomplus @ 15.06.2019, 13:02:50 ) *
Czyli nie chcesz usuwać wierszy, tylko wyczyścić wartości.

  1. UPDATE tabela SET value=NULL, valueX = NULL, valueY = NULL;



Ehhh, miałem nadzieję na jakieś polecenie typu , "Delete from Klan except ..."

To akurat wiedziałem, mówię, żeby nie wyjść na kompletnego debila.

Dzięki za pomoc smile.gif
Go to the top of the page
+Quote Post
Tomplus
post 15.06.2019, 13:30:28
Post #7





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

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


DELETE usuwa wiersze.
A ty chcesz pozstawić kolumnę, więc wierszy nie możesz usunąć.

ewenetualnie

  1. ALTER TABLE tabela DROP COLUMN value, DROP COLUMN valueX;

Usuwa tylko wybrane kolumny
Go to the top of the page
+Quote Post
Nidan23
post 15.06.2019, 14:31:22
Post #8





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

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


Dobra, obędzie się bez tego, coś wykombinuje na moim poziomie wiedzy, ale dzięki za pomoc wink.gif
Go to the top of the page
+Quote Post
Pyton_000
post 16.06.2019, 10:46:03
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Znając życie masz zupełnie inny problem a próbujesz się do niego dobrać od dupy strony.
Go to the top of the page
+Quote Post
Nidan23
post 16.06.2019, 13:09:15
Post #10





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

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


Cytat(Pyton_000 @ 16.06.2019, 11:46:03 ) *
Znając życie masz zupełnie inny problem a próbujesz się do niego dobrać od dupy strony.


Znając życie tak, znając sytuacje nie, bo tak kolumna to 1 pojawienie się rekordu w tabeli i nie chcę go usuwać czyszcząc tabele co miesiąc, co jest jednym z założeń mojej strony i ich gry, sooooo nie da się i trudno
Go to the top of the page
+Quote Post
Pyton_000
post 16.06.2019, 13:51:30
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pokaż przykład co masz i co byś chciał mieć
Go to the top of the page
+Quote Post
Nidan23
post 16.06.2019, 14:01:16
Post #12





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

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


Cytat(Pyton_000 @ 16.06.2019, 14:51:30 ) *
Pokaż przykład co masz i co byś chciał mieć


Ale tu nie ma czego pokazywać, schemat tabeli wygląda tak:

  1. CREATE TABLE IF NOT EXISTS `explayers` (
  2. `miejsce` int(11) DEFAULT NULL,
  3. `liga` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  4. `poziom` int(11) DEFAULT NULL,
  5. `tag` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  6. `nick` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  7. `ranga` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  8. `donated` int(11) DEFAULT NULL,
  9. `sdonated` int(11) DEFAULT NULL,
  10. `rdonated` int(11) DEFAULT NULL,
  11. `received` int(11) DEFAULT NULL,
  12. `roznica` int(11) DEFAULT NULL,
  13. `puchary` int(11) DEFAULT NULL,
  14. `warstars` int(11) DEFAULT NULL,
  15. `swarstars` int(11) DEFAULT NULL,
  16. `rwarstars` int(11) DEFAULT NULL,
  17. `gamedon` int(22) DEFAULT NULL,
  18. `awin` int(11) DEFAULT NULL,
  19. `dwin` int(11) DEFAULT NULL,
  20. `th` int(3) DEFAULT NULL,
  21. `elixir` int(22) DEFAULT NULL,
  22. `selixir` int(22) DEFAULT NULL,
  23. `uelixir` int(22) DEFAULT NULL,
  24. `gold` int(22) DEFAULT NULL,
  25. `sgold` int(22) DEFAULT NULL,
  26. `ugold` int(22) DEFAULT NULL,
  27. `dark` int(22) DEFAULT NULL,
  28. `sdark` int(22) DEFAULT NULL,
  29. `udark` int(22) DEFAULT NULL,
  30. `cwls` int(11) DEFAULT NULL,
  31. `scwl` int(11) DEFAULT NULL,
  32. `rcwl` int(11) DEFAULT NULL,
  33. `cg` int(11) DEFAULT NULL,
  34. `scg` int(11) DEFAULT NULL,
  35. `rcg` int(11) DEFAULT NULL,
  36. `cc` int(2) DEFAULT NULL,
  37. `gstar` int(4) DEFAULT NULL,
  38. `aktualizacja` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  39. `data` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  40. `ppc` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  41. `ppd` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  42. `pk` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
  43. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



ppc => pierwsze pojawienie czas - godzina:minuta;

Sezon w grze trwa około 30 dni i wtedy resetują się statystyki, więc i ja opróżniam tabelę, ale chcę jakoś zatrzymać pierwsze pojawienie, bo to oznacza kiedy gracz przyszedł do nas.


Jednak właśnie uświadomiłem sobie, że mogę to zrobić inaczej, biorąc dane z tabel z poprzednich miesięcy/sezonów i użyć UPDATE, więc uważam temat za zamknięty, dzięki wink.gif
Go to the top of the page
+Quote Post
Tomplus
post 16.06.2019, 14:25:29
Post #13





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

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


I sam widzisz, źle zaprojektowałeś sobie bazę danych. Uniemożliwiasz sobie stworzenie historii rozgrywek.

Bo nie lepiej byłoby rozdzielić tą tabelę na więcej tabel?

explayers
id, nick, ppc

exgames
season, idExplayer, liga, poziom, gold... etc...

Go to the top of the page
+Quote Post
Nidan23
post 27.06.2019, 13:22:04
Post #14





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

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


Cytat(Tomplus @ 16.06.2019, 15:25:29 ) *
I sam widzisz, źle zaprojektowałeś sobie bazę danych. Uniemożliwiasz sobie stworzenie historii rozgrywek.

Bo nie lepiej byłoby rozdzielić tą tabelę na więcej tabel?

explayers
id, nick, ppc

exgames
season, idExplayer, liga, poziom, gold... etc...


Niesądzę, ponieważ wtedy, aby wyświetlić dane w tabeli, czy wykresie musiałbym pobierać dane z 2 tabel, a w dodatku te wszystkie dane (bo nie jestem pewny czy zauważyłeś, nie dziwię się jeśli nie) dotyczą tego samego gracza - 1 wiersz = 1 gracz, więc aby pobierać dane, musiałbym mieć jakiekolwiek rozeznanie, kto jest kim, a jedyną unikalną rzeczą jest tag, więc wszystko siedzi w jednej tabeli.
Go to the top of the page
+Quote Post
SmokAnalog
post 27.06.2019, 13:35:34
Post #15





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Tomplus ma rację - baza jest źle zaprojektowana. Baz nie projektuje się w poziomie, bo potem napotykasz na absurdalne problemy tak jak ten tutaj.

Co jest złego w pobieraniu danych z dwóch tabel? Płacisz złotówkę od każdej tabeli w zapytaniu czy jak?
Go to the top of the page
+Quote Post
Tomplus
post 28.06.2019, 18:55:03
Post #16





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

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


@Nidan
Kiedyś uważałem tak samo. Dopóki nie trafiłem na problem który masz teraz.
Też miałem stronę gdzie było 1 gracz = 1 wiersz, więcej nie było potrzeba gdy strona była prosta, gdy rosła, kolejne funkcje były dodawane, to myślenie powodowały problemy. Najgorsze jest to że czasem dochodzi do takiego momentu że aby coś robić dalej, musisz przeprojektować bazę, a przeprojektowanie bazy powoduje że trzeba przeprojektować wiele aspektów serwisu.

Go to the top of the page
+Quote Post
Nidan23
post 28.06.2019, 21:48:57
Post #17





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

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


Cytat(Tomplus @ 28.06.2019, 19:55:03 ) *
@Nidan
Kiedyś uważałem tak samo. Dopóki nie trafiłem na problem który masz teraz.
Też miałem stronę gdzie było 1 gracz = 1 wiersz, więcej nie było potrzeba gdy strona była prosta, gdy rosła, kolejne funkcje były dodawane, to myślenie powodowały problemy. Najgorsze jest to że czasem dochodzi do takiego momentu że aby coś robić dalej, musisz przeprojektować bazę, a przeprojektowanie bazy powoduje że trzeba przeprojektować wiele aspektów serwisu.


A gdy dodać coś w tylu:

  1. $sql = "SELECT PierwszePojawnie FROM 1";
  2. $conn->query('SET NAMES utf8');
  3. $conn->query('SET CHARACTER_SET utf8_unicode_ci');
  4. $result = $conn->query($sql);
  5.  
  6. if ($result->num_rows > 0) {
  7. blablabla
  8. }
  9. else {$sql = "SELECT PierwszePojawnie FROM tabela2";
  10. $conn->query('SET NAMES utf8');
  11. $conn->query('SET CHARACTER_SET utf8_unicode_ci');
  12. $result = $conn->query($sql);
  13. if ($result->num_rows > 0) {
  14. blablabla
  15. }
  16. }


itd.? Ja wiem, to jest zła optymalizacja i sporo zabawy, bo co miesiąc musiałbym dodawać dodatkową część do skryptu, ale tak całkowicie teoretycznie, miałoby to szanse działać?
(spokojnie, nie mam zamiaru tego robić, bo już mam wzór bazy w głowie po przebudowaniu)
Go to the top of the page
+Quote Post
Tomplus
post 29.06.2019, 09:35:45
Post #18





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

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


Lepsze jest rozwiążanie:

  1. SELECT listaLogowan.PierwszePojawienie, listaGraczy.nazwa FROM listaGraczy LEFT JOIN listaLogowan ON listaGraczy.id = listaLogowan.idGracza WHERE listaLogowan.idGracza = ? ORDER BY listaLogowan.czasLogowania LIMIT 1;


listaLogowan = listaAktywnosci etc...

Jedno zapytanie, dwie tabele.
Spokojnie można łączyć więcej niż jedną tabelę.

Np. masz listę statusów użytkownika:
1. Administrator
2. Moderator
3. Gracz
4. Zbanowany

w tabeli z użytkownikami masz kolumnę `status` i nie piszesz tam że ktoś jest adminem, a ktoś modem, a tylko dajesz informację cyfrową.
W kodzie nie robisz tablicy: $statusyGraczy = []; Bo okaże się że w wielu skryptach będziesz musiał powtarzać takie tablice, a gdzieś nie powtórzysz i wyjdzie Ci błąd.

Dodatkowo, dzięki temu możesz nadawać specjalne informacje dla danego statusu i wykorzystać w zapytaniu. Teraz będziesz to robił dodając specjalną kolumnę dla każdego użytkownika.
Go to the top of the page
+Quote Post
Nidan23
post 30.06.2019, 14:47:09
Post #19





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

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


Cytat(Tomplus @ 28.06.2019, 19:55:03 ) *
@Nidan
Kiedyś uważałem tak samo. Dopóki nie trafiłem na problem który masz teraz.
Też miałem stronę gdzie było 1 gracz = 1 wiersz, więcej nie było potrzeba gdy strona była prosta, gdy rosła, kolejne funkcje były dodawane, to myślenie powodowały problemy. Najgorsze jest to że czasem dochodzi do takiego momentu że aby coś robić dalej, musisz przeprojektować bazę, a przeprojektowanie bazy powoduje że trzeba przeprojektować wiele aspektów serwisu.


Myślisz, że taka taki schemat jest rozsądniejszy? Wtedy co sezon czyszczę tylko jedną tabelę (klandata) a z drugiej zwyczajnie są usuwane osoby nie będące już w tym klanie.

  1. CREATE TABLE IF NOT EXISTS `klanplayers` (
  2. `miejsce` int(11) DEFAULT NULL,
  3. `tag` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  4. `nick` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  5. `ranga` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  6. `aktualizacja` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  7. `data` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  8. `ppc` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  9. `ppd` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  10. `ak` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  11. `cb` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  13.  
  14. CREATE TABLE IF NOT EXISTS `klandata` (
  15. `miejsce` int(11) DEFAULT NULL,
  16. `liga` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  17. `poziom` int(11) DEFAULT NULL,
  18. `tag` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
  19. `nick` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
  20. `donated` int(11) DEFAULT NULL,
  21. `sdonated` int(11) NOT NULL,
  22. `rdonated` int(11) DEFAULT NULL,
  23. `received` int(11) DEFAULT NULL,
  24. `roznica` int(11) DEFAULT NULL,
  25. `puchary` int(11) DEFAULT NULL,
  26. `warstars` int(11) DEFAULT NULL,
  27. `swarstars` int(11) DEFAULT NULL,
  28. `rwarstars` int(11) DEFAULT NULL,
  29. `gamedon` int(22) DEFAULT NULL,
  30. `awin` int(11) DEFAULT NULL,
  31. `dwin` int(11) DEFAULT NULL,
  32. `th` int(3) DEFAULT NULL,
  33. `elixir` int(22) DEFAULT NULL,
  34. `selixir` int(22) DEFAULT NULL,
  35. `uelixir` int(22) DEFAULT NULL,
  36. `gold` int(22) DEFAULT NULL,
  37. `sgold` int(22) DEFAULT NULL,
  38. `ugold` int(22) DEFAULT NULL,
  39. `dark` int(22) DEFAULT NULL,
  40. `sdark` int(22) DEFAULT NULL,
  41. `udark` int(22) DEFAULT NULL,
  42. `cwls` int(11) DEFAULT NULL,
  43. `scwl` int(11) DEFAULT NULL,
  44. `rcwl` int(11) DEFAULT NULL,
  45. `cg` int(11) DEFAULT NULL,
  46. `scg` int(11) DEFAULT NULL,
  47. `rcg` int(11) DEFAULT NULL,
  48. `cc` int(2) DEFAULT NULL,
  49. `gstar` int(4) DEFAULT NULL
  50. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Go to the top of the page
+Quote Post
Tomplus
post 1.07.2019, 05:21:43
Post #20





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

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


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'?



Ten post edytował Tomplus 1.07.2019, 05:34:56
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: 28.03.2024 - 17:54