Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Zmiana numerów ID na podstawie daty i godziny
Forum PHP.pl > Forum > Przedszkole
Salarieri
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.
Tomplus
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. }

Salarieri
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…
trueblue
A w jakim celu potrzebujesz tą numerację bezpośrednio w tabelce?
Salarieri
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.
trueblue
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.
Salarieri
No, Twój sposób też byłby dobry.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.