Muziek chart database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Fabian W

Fabian W

27/08/2014 18:39:31
Quote Anchor link
Ik probeer een database te maken van een muziekchart die ik bijhoud.

mijn huidige tabellen:

pchart201434
rank id
1 Hardwell - Arcadia
2 Sander van Doorn - Gold Skies
3 Lorde - Tennis Court
4 Arty - Up All Night
5 Katy Perry - This Is How We Do

pchart201433
rank id
1 Hardwell - Arcadia
2 Arty - Up All Night
3 Sander van Doorn - Gold Skies
4 Lorde - Tennis Court
5 Train - Angel In Blue Jeans

songs:
id artiest song afb
Hardwell - Arcadia Hardwell & Joey Dale ft. Luciana Arcadia Arcadia.jpg
Sander van Doorn - Gold Skies Sander van Doorn, Martin Garrix & Dvbbs ft. Aleesia Gold Skies Gold Skies.jpg
Lorde - Tennis Court Lorde Tennis Court Tennis Court.jpg
Arty - Up All Night Arty ft. Angel Taylor Up All Night Up All Night.jpg
Katy Perry - This Is How We Do Katy Perry This Is How We Do This Is How We Do.jpg
Train - Angel In Blue Jeans Train Angel In Blue Jeans Angel In Blue Jeans.jpg


pchart
id aw hp
Hardwell - Arcadia NULL NULL
Sander van Doorn - Gold Skies NULL NULL
Lorde - Tennis Court NULL NULL
Arty - Up All Night NULL NULL
Katy Perry - This Is How We Do NULL NULL
Train - Angel In Blue Jeans NULL NULL

Hieruit stel ik een tabel op die deze info gezamenlijk weergeeft:

SELECT pchart201434.rank, pchart201433.rank, songs.afb, songs.artiest, songs.song, pchart.aw, pchart.hp
FROM pchart201434
LEFT JOIN pchart201433 ON pchart201434.id = pchart201433.id
LEFT JOIN songs ON pchart201434.id = songs.id
LEFT JOIN pchart ON pchart201434.id = pchart.id
ORDER BY pchart201434.rank

Dit geeft een tabel, waar pchart201433.rank voor de positie in de chart van vorige week staat
nu wil ik dat pchart.aw het aantal weken van een bepaalde plaat aangeeft en
pchart.hp de hoogst behaalde positie.

Zo heeft in dit voorbeeld Gold Skies als aantal weken 2 en als hoogste positie 2.
Het aantal weken kan natuurlijk flink oplopen.

Ik zoek nu dus een manier om te tellen in hoeveel van de tabellen pchart201430, pchart201431, pchart201432 etc een bepaald id voorkomt. Ik moet hier denk ik COUNT voor gebruiken maar ik weet niet hoe.

Daarnaast zoek ik een manier om de maximum rank van een bepaald id te bepalen. Dit moet denk ik met MAX() maar ik weet ook niet hoe ik dat in deze context moet gebruiken.

(de eerste kolom van een tabel is steeds de primary key)

Zou iemand me hierbij kunnen helpen?
Gewijzigd op 27/08/2014 18:41:45 door Fabian W
 
PHP hulp

PHP hulp

16/11/2024 17:42:38
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 18:44:36
Quote Anchor link
Als ik genummerde velden zie gaan mijn handen behoorlijk jeuken, omdat het inefficent gebruik van een database is. Meteen deze structuur weggooien!

Ikzelf zou de charts een eigen tabel meegeven met een ID (Primary Key), en de liedjes ook in een eigen tabel met elk een eigen ID (Primary Key).

Vervolgens is er een koppeltabel charts_song waarin er een koppeling tussen de ID's van de charts wordt gelegd, en het ID van de liedjes, met daarin de huidige plaats.

Dan kan je met een LEFT JOIN makkelijker een selectie maken, en met een COUNT() makkelijker tellen.

Charts
ID (PK, A_I)
StartDate

Songs
ID (PK, A_I)
Title
Artist

Charts_songs
ChartsID
SongsID
Rank

Lees ook eens : http://nl.wikipedia.org/wiki/Databasenormalisatie
Gewijzigd op 27/08/2014 18:51:02 door - Ariën -
 
Fabian W

Fabian W

27/08/2014 18:48:05
Quote Anchor link
Ik had zelf ook behoorlijk wat twijfels wat een goede structuur zou zijn voor een muziekchartdatabase. Normalisatie is iets wat ik soms wat moeilijk begrijp. Dan kunnen we het misschien beter op jouw manier doen.

Trouwens rank staat voor de positie van die week. Dus hoe zou je dat vervangen?

Toevoeging op 27/08/2014 18:52:01:

Of zou jij de positie van elke week als kolom in een tabel van songs aangegeven?
Dat leek mij behoorlijk inefficient.
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 18:52:16
Quote Anchor link
Kijk eens naar mijn edit hierboven. In de koppeltabel zou je de rank aan kunnen geven.
Gewijzigd op 27/08/2014 18:53:13 door - Ariën -
 
Fabian W

Fabian W

27/08/2014 18:55:18
Quote Anchor link
ja en wat moet de "charts" tabel aangeven? De datum dat een plaat binnenkomt?

Toevoeging op 27/08/2014 18:55:59:

met startdate bedoel ik
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 18:57:57
Quote Anchor link
De tabelnaam zegt het al: Charts, en dat is dus geen plaat.
De startdatum van de hitlijst, de nummering wordt automatisch door Auto-Increment gedaan.
Gewijzigd op 27/08/2014 18:59:33 door - Ariën -
 
Fabian W

Fabian W

27/08/2014 18:59:11
Quote Anchor link
Dus de koppeltabel geeft een rank weer, een nummer en de datum dat deze rank behaald wordt.
Krijg je dan niet een enorm lange tabel?

Dan krijg je bijvoorbeeld 20x hetzelfde nummer als die het 20 weken in een chart volhoudt.
Gewijzigd op 27/08/2014 19:00:29 door Fabian W
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:01:42
Quote Anchor link
De koppeltabel geeft het ID van de song aan, het ID van de chart (hitlijst) waar hij bij hoort, en rank geeft de positie binnen die hitlijst.

En ja, de tabel kan groot worden, maar voor een database is dat echt geen enkel probleem. Ik heb wel een MySQL-databases gezien van 50 GB. Maar een tabelletje met integers, zal het echt niet verbazingwekkend groot worden. En anders kan je altijd wat INDEX'es op de ID's plaatsen.

Misschien dat iemand het beter kan normaliseren, maar in ieder geval zit je op de goede weg.
Gewijzigd op 27/08/2014 19:03:47 door - Ariën -
 
Fabian W

Fabian W

27/08/2014 19:05:48
Quote Anchor link
Het is dus beter om lange tabellen te hebben dan ontzettend veel tabellen als ik het goed begrijp?
(ik heb zelf geen idee)
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:07:12
Quote Anchor link
Ja, dat klopt.
 
Fabian W

Fabian W

27/08/2014 19:08:09
Quote Anchor link
O lol, ik dacht juist andersom.

Toevoeging op 27/08/2014 19:09:44:

trouwens is de tabel charts dan niet overbodig, ipv chartsID kan je toch ook startdate nemen in de Charts_songs tabel?

Toevoeging op 27/08/2014 19:10:26:

o nee natuurlijk niet dan heb je geen primarry key

Toevoeging op 27/08/2014 19:13:10:

Maar als ik dan een chart wil maken, dan moet ik het id van elke song onthouden, dat is toch niet te doen als het een nummertje is.
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:18:28
Quote Anchor link
Je zou ook de StartDate van een chart kunnen gebruiken in de koppeltabel, of je wilt nog iets speciaals met de charts doen.
 
Fabian W

Fabian W

27/08/2014 19:20:23
Quote Anchor link
wat bedoel je precies met iets speciaals?
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:23:40
Quote Anchor link
Die tabel is in dit opzicht niet echt nuttig, denk ik. Ik denk dat je zelf beter af bent door de StartDate zelf al in de koppeltabel te plaatsen.
 
Fabian W

Fabian W

27/08/2014 19:28:36
Quote Anchor link
oke dan hebben we dus

Songs
ID (PK, A_I)
Title
Artist
Image

Koppeltabel
Rank
Jaar
Week
ID_Songs

Dan kun je dus aantal weken weergeven met COUNT(Rank) WHERE ID_Songs = ...
En Hoogste plaats met MAX(Rank) Where ID_Songs = ...

Dan komen vw, aw en hp dus ook in de koppeltabel
Gewijzigd op 27/08/2014 19:35:43 door Fabian W
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:33:41
Quote Anchor link
Aan de hand van de weken kan je toch ook met MySQL kijken wat de rank van de vorige week was?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

27/08/2014 19:34:53
Quote Anchor link
Het is denk ik zelfs handiger om datum te vervangen door twee kolommen (jaar en weeknr.)
 
Fabian W

Fabian W

27/08/2014 19:34:56
Quote Anchor link
ja klopt, vw van week 34 is dus waar de startdatum week 33 was

Toevoeging op 27/08/2014 19:36:59:

Wat is trouwens jullie standpunt over afbeeldingen in de database (of zelfs video's)
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:38:53
Quote Anchor link
Die horen op het filesystem, en een koppeling met de bestandsnaam hoort in de database. het kost minder CPU-power, en het is makkelijker beheerbaarder. Stel dat je je foto's en video's ooit eens op een aparte server wilt zetten.
Gewijzigd op 27/08/2014 19:40:01 door - Ariën -
 
Fabian W

Fabian W

27/08/2014 19:40:48
Quote Anchor link
bedoel je dan dat je alleen de link: /afb/Gold Skies.jpg opslaat in de database?
 
- Ariën  -
Beheerder

- Ariën -

27/08/2014 19:43:18
Quote Anchor link
Dat klopt.
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.