Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] ostatnie x rekordów
Forum PHP.pl > Forum > Przedszkole
ghij
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ę smile.gif

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ł?
kpt_lucek
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.
ghij
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.
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.