Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL] Zmiana numerów ID na podstawie daty i godziny
Salarieri
post 1.12.2019, 20:54:10
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2019

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


Witam. Mam problem z tabelką SQL, na który nie mogę znaleźć odpowiedzi w wyszukiwarce, dlatego postanowiłem napisać ten temat. W jednej kolumnie "data" mam daty i godziny (np. 2003-04-15 14:11:01), zaś w drugiej kolumnie "kolej" chciałbym porobić numery – wiersz o najwcześniejszej dacie i godzinie miałby mieć numer 1 i tak po kolei do ostatniego o najpóźniejszej dacie i godzinie.
Go to the top of the page
+Quote Post
Tomplus
post 1.12.2019, 22:20:16
Post #2





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

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


Zapytanie, posortuje wg daty:
  1. SELECT `data`, `kolej` FROM tabela ORDER BY `data` ASC


w pętli:

  1. $lp=0;
  2. foreach($wynikZapytania as $wiersz) {
  3. $lp ++;
  4. echo "<br>{$lp}. {$wierz['data']} {$wiersz['kolej']} ";
  5. }

Go to the top of the page
+Quote Post
Salarieri
post 6.12.2019, 20:32:48
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2019

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


Dzięki za odpowiedź, ale to co wkleiłeś chyba jedynie wypisze mi wiersze z tabeli, a mi chodzi o zmianę w tabelce SQL, aby nadać nowe numery na tej zasadzie:

Tabelka ma ponad 11 tys. rekordów, więc ręczne wpisywanie chyba odpada, bo by się z tydzień z tym zeszło…
Go to the top of the page
+Quote Post
viking
post 6.12.2019, 20:44:05
Post #4





Grupa: Zarejestrowani
Postów: 5 466
Pomógł: 930
Dołączył: 30.08.2006

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


https://stackoverflow.com/questions/1048576...-based-on-order


--------------------
Go to the top of the page
+Quote Post
trueblue
post 7.12.2019, 07:57:26
Post #5





Grupa: Zarejestrowani
Postów: 5 675
Pomógł: 1554
Dołączył: 11.03.2014

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


A w jakim celu potrzebujesz tą numerację bezpośrednio w tabelce?


--------------------
Go to the top of the page
+Quote Post
Salarieri
post 7.12.2019, 19:33:19
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2019

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


Cytat(viking @ 6.12.2019, 20:44:05 ) *


Dzięki za pomoc w znalezieniu, zadziałał ten kod:
  1. SET @counter = 0;
  2. UPDATE nazwa_tabeli
  3. SET kolej = @counter := @counter + 1
  4. ORDER BY DATA;


Cytat(trueblue @ 7.12.2019, 07:57:26 ) *
A w jakim celu potrzebujesz tą numerację bezpośrednio w tabelce?

Postanowiłem połączyć ze sobą trzy tabelki SQL z artykułami w jedną. W jednej najnowszej tabelce są artykuły od 2012 do obecnie, w drugiej archiwalne od 2003 do 2012, a w trzeciej na razie niedostępnej publicznie od 2005 do 2012. Wiadomo, musiałem poprzerabiać te starsze tabelki pod nowszą, czyli aby kolumny się tak samo nazywały – np. jedna kolumna z tą samą zawartością w jednej tabelce nazywała się "tresc", a w starszej "tekst", a także porobić w starszych dodatkowe kolumny z pustą zawartością, np. "linkfilm" (link do reportażu video), dodatkowo zmienić kodowanie tekstu i typ kolumn na jednakowe. Pewnym problemem był klucz podstawowy "id", który się w tabelkach powtarzał. Na początku pomyślałem, żeby w tej najnowszej tabelce pozmieniać numery id o 11 tys. do góry, ale to głupi pomysł, bo wtedy w Googlach by się pomieszało, ktoś wchodził by na link z wyszukiwarki i otwierał by się zupełnie inny artykuł niż potrzeba, dlatego też postanowiłem tego nie ruszać. Zastosowałem inne sprytne obejście z wykorzystaniem ułamków, np. artykuł archiwalny o id 5432 w tej najnowszej połączonej tabelce ma teraz id 0.5432, zaś np. o id 432 w nowszej to 0.0432. Druga archiwalna tabelka to samo tylko na początku 1. np. 1.212. Dzięki temu będę mógł łatwo zrobić przekierowanie w .htaccess, wcześniej zastanawiałem się nad liczbami ujemnymi, ale te ułamki to zdecydowanie lepszy pomysł. Oczywiście pozostał ten problem, że robiąc sortowanie według "id" miałbym nie poklei według daty, bo artykuły z numerami 0. są od 2003 do 2012, a z 1. od 2005 do 2012, miałbym na stronie najpierw od 2003 do 2012, a później znowu od 2005 do 2012 zamiast po kolei. Natomiast na stronie nie mogę dać sortowania kolejności artykułów według dat, ponieważ w najnowszej wersji są one sortowane według dodatkowej kolumny z numerkami "kolej", dzięki czemu administrator dodający do bazy artykuły ma możliwość przestawienia kolejności ich wyświetlania na stronie, może się tak zdarzyć, że wcześniej wrzucony artykuł jest ciekawszy i dłuższy, i warto go ustawić bardziej na początku.
Go to the top of the page
+Quote Post
trueblue
post 7.12.2019, 20:03:36
Post #7





Grupa: Zarejestrowani
Postów: 5 675
Pomógł: 1554
Dołączył: 11.03.2014

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


Jeśli dobrze rozumiem, to chciałeś zachować ID i klucz sortowania tej najnowszej tabeli, tak?

ID starszych danych mogłeś zacząć od MAX(ID)+1 z najnowszej tabeli. Klucz sortowania najnowszej tabeli zwiększyć o wartość wynikającą z ilości rekordów w starych tabelach (Y), a potem rekordy w starych tabelach ponumerować od 1 do Y.


--------------------
Go to the top of the page
+Quote Post
Salarieri
post 8.12.2019, 14:00:16
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.09.2019

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


No, Twój sposób też byłby dobry.
Go to the top of the page
+Quote Post

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.01.2020 - 09:55