Napisany przez: Salarieri 1.12.2019, 20:54:10
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.
Napisany przez: Tomplus 1.12.2019, 22:20:16
Zapytanie, posortuje wg daty:
SELECT `data`, `kolej` FROM tabela ORDER BY `data` ASC
w pętli:
$lp=0;
foreach($wynikZapytania as $wiersz) {
$lp ++;
http://www.php.net/echo "<br>{$lp}. {$wierz['data']} {$wiersz['kolej']} ";
}
Napisany przez: Salarieri 6.12.2019, 20:32:48
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…
Napisany przez: viking 6.12.2019, 20:44:05
https://stackoverflow.com/questions/10485769/mysql-update-a-column-with-an-int-based-on-order
Napisany przez: trueblue 7.12.2019, 07:57:26
A w jakim celu potrzebujesz tą numerację bezpośrednio w tabelce?
Napisany przez: Salarieri 7.12.2019, 19:33:19
Cytat(viking @ 6.12.2019, 20:44:05 )
https://stackoverflow.com/questions/10485769/mysql-update-a-column-with-an-int-based-on-order
Dzięki za pomoc w znalezieniu, zadziałał ten kod:
SET @counter = 0;
UPDATE nazwa_tabeli
SET kolej = @counter := @counter + 1
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.
Napisany przez: trueblue 7.12.2019, 20:03:36
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.
Napisany przez: Salarieri 8.12.2019, 14:00:16
No, Twój sposób też byłby dobry.