![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.08.2016 Ostrzeżenie: (0%) ![]() ![]() |
Hej próbuję zrobić serwis zbierajacy muzyke ze stacji radiowych i zapisywać w bazie wszystko co gralo w radiu.
W tej chwili mam taką strukturę bazy: Kod -- -- Struktura tabeli dla tabeli `playlist` -- CREATE TABLE IF NOT EXISTS `playlist` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `znacznik_czasu` int(10) unsigned NOT NULL, `track_id` int(11) unsigned NOT NULL, `radio_id` smallint(5) unsigned NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `CzasRadioID` (`znacznik_czasu`,`radio_id`), KEY `radioID` (`radio_id`), KEY `SongID` (`track_id`), KEY `ts` (`znacznik_czasu`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3224080; -- -- Ograniczenia dla tabeli `playlist` -- ALTER TABLE `playlist` ADD CONSTRAINT `playlist_ibfk_1` FOREIGN KEY (`radio_id`) REFERENCES `stations` (`radio_id`) ON UPDATE CASCADE, ADD CONSTRAINT `playlist_ibfk_2` FOREIGN KEY (`track_id`) REFERENCES `tracks` (`track_id`) ON DELETE CASCADE ON UPDATE CASCADE; -- -- Struktura tabeli dla tabeli `artists` -- CREATE TABLE IF NOT EXISTS `artists` ( `artist_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `hash` char(32) NOT NULL, PRIMARY KEY (`artist_id`), UNIQUE KEY `hash` (`hash`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10988; -- -- Struktura tabeli dla tabeli `tracks` -- CREATE TABLE IF NOT EXISTS `tracks` ( `track_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `artist_id` int(10) unsigned NOT NULL, `hash` char(32) NOT NULL, PRIMARY KEY (`track_id`), UNIQUE KEY `hash` (`hash`), KEY `artist_id` (`artist_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=47976; -- -- Ograniczenia dla tabeli `tracks` -- ALTER TABLE `tracks` ADD CONSTRAINT `tracks_ibfk_1` FOREIGN KEY (`artist_id`) REFERENCES `artists` (`artist_id`) ON UPDATE CASCADE; -- -- Struktura tabeli dla tabeli `stations` -- CREATE TABLE IF NOT EXISTS `stations` ( `radio_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(60) NOT NULL, PRIMARY KEY (`radio_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=162; W tabeli tracks trzymam między innymi tytuł utworu i id artysty (id powiązany z id artysty w tabeli artists) W tabeli artists trzymam dane artystów W tabeli stations trzymam dane o stacji radiowej W tabeli playlist trzymam czas odtworzenia, id utworu z tabeli tracks, i id stacji z tabeli stations Chce na stronie zrobić bloki z wszystkimi stacjami i W każdym bloku 5 ostatnio zagranych utworów. W jaki sposób mogę z takiej struktury wyciągnąć 5 ostatnich utworów (wg znacznik_czasu) dla każdego radio_id z tabeli playlist? dla każdego track_id chciałbym dostać w każdym rekordzie Kod playlist.radio_id, playlist.znacznik_czasu, playlist.track_id, tracks.title, tracks.artist_id, artists.name Mogę prosić o pomoc w zbudowaniu (lub zbudowanie) zapytania wyciągającego potrzebne mi dane? bo sam chyba tego nie ogarnę ![]() Dla jednej konkretnej stacji sobie wyciągnę te dane (5 ostatnich po playlist.znacznik_czasu i radio_id) bez problemu, ale nie wiem jak, nie umiem ograniczyć do 5 ostatnich dla każdego radio_id, i zrobić to w jednym zapytaniu. Dane zbierane są na bieżąco cronem od stycznia i playlista ma już blisko 3 miliony rekordów. Zastanawiam się czy np nie rozdzielić playlisty na dwie tabele. "1" - ostatnie X czasu (np. 2 miesiące), "2" - reszta, i aktualizować co noc cronem przenosząc starsze rekordy do tabeli "2", i usuwając te starsze z tabeli "1". Odciążyłbym chyba tym samym tabelę "1" z bieżącymi danymi, do "2" z historycznymi danymi, jest rzadka potrzeba zaglądania. Czy to dobry pomysł? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Raczej średnio widzę sens robienia tego w jednym zapytaniu, przede wszystkim dlatego, że nie masz pewności że te 5 na które się przygotowujesz tam będzie, poza tym będzie to trudniejsza składnia dla bazy.
Zapytaj się w pętli o statystyki (ostatnie 5, czy ile tam potrzebujesz) i operuj na tych danych. -------------------- Cytat There is a Bundle for that Lukas Kahwe Smith - October 31th, 2014 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 20.08.2016 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję, znaczy jak będzie 50 stacji radiowych na stronie i dla każdej chcę blok z ostatnimi utworami to mam zrobić 50 zapytań? Dane z wszystkich stacji godzina id utworu i id stacji sa w jednej tabeli.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 10:03 |