[SQL] Join is te uitgebreid

Pagina: 1
Acties:

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 12-11 09:57
Ik zit met een probleem, waarbij ik vermoed dat het aan mijn kennis ontbreekt. Het gaat om het volgende.

Via MediaMonkey Gold heb ik een excel document laten uitdraaien van al mijn MP3's. Deze heb ik 1 op 1 geimporteerd in een MySQL tabel. Belangrijke kolommen voor nu betreft album, title, artist. Eigenlijk zou ik nu alle unieke albums willen hebben. Dit is in principe redelijk makkelijk natuurlijk:
SQL:
1
select distinct album from mp3full


Echter, ik wil graag ook de artiest erbij hebben. Dit krijg ik met geen mogelijkheid voor elkaar. Heb ook al een koppeltabel gemaakt met alle albums en een album_id hierin. Vervolgens een left-join op albums en een koppeling op albums.album = mp3full.album.

Het probleem bevindt zich DENK ik bij de verzamel albums. In mp3 full staan dus ALLE mp3's apart vermeld. Een verzamelalbum heeft misschien 20 verschillende artiesten, maar slecht 1 album naam.

Hoe ga ik dit toch oplossen ?

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Op de volgende manier heb je in ieder geval al je albums met een artiest (bij verzamelalbums zal je dus ook maar 1 artiest zien!!).
SQL:
1
SELECT album, artist FROM mp3full GROUP BY album;

If I can't fix it, it ain't broken.


  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 12-11 09:57
Borizz schreef op zondag 10 december 2006 @ 12:13:
Op de volgende manier heb je in ieder geval al je albums met een artiest (bij verzamelalbums zal je dus ook maar 1 artiest zien!!).
SQL:
1
SELECT album, artist FROM mp3full GROUP BY album;
Dat werkt ! Dank je. Ik weet dat dit geen goede manier is, omdat ik dus van mijn verzamelalbums 'foute' antwoorden terug krijg. Mijn bedoeling is dus ook om in de toekomst alles in aparte tabellen te zetten. Alle albums, alle artiesten en dergelijken. Maar dan krijg je nog het probleem van 2 artiesten in 1 nummer, haha.

Maar zover gaan we dan maar weer niet.

Bedankt in ieder geval !

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Massiefje schreef op zondag 10 december 2006 @ 12:19:
Maar dan krijg je nog het probleem van 2 artiesten in 1 nummer, haha.
GROUP_CONCAT en klaar ben je.

(en het kan op nog wel 101 manieren)

{signature}


  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 12-11 09:57
nu we het hier toch over hebben... heeft niemand geen goed programma, dat alle mp3's op de juiste manier indexeert op id3v1 en/of id3v2 en dat in een MySQL server stopt ? Nu moet ik alles handmatig doen en als er dan een nieuw album bij komt, moet alles weer overnieuw.....

  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
Massiefje schreef op zondag 10 december 2006 @ 12:29:
nu we het hier toch over hebben... heeft niemand geen goed programma, dat alle mp3's op de juiste manier indexeert op id3v1 en/of id3v2 en dat in een MySQL server stopt ? Nu moet ik alles handmatig doen en als er dan een nieuw album bij komt, moet alles weer overnieuw.....
Ik weet niet of je PHP gebruikt voor je applicatie, anders zou je naar oplossingen kunnen zoeken op google:
http://www.google.nl/sear...hl=nl&q=mp3+id3+php&meta=

  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 12-11 09:57
Upsal schreef op zondag 10 december 2006 @ 12:32:
[...]


Ik weet niet of je PHP gebruikt voor je applicatie, anders zou je naar oplossingen kunnen zoeken op google:
http://www.google.nl/sear...hl=nl&q=mp3+id3+php&meta=
Op dit moment is er nog geen applicatie, daar ben ik juist naar op zoek :) Maar ik werk voornamelijk met PHP en C#. PHP voor webprojecten en C# voor Windows Services en desktop software.

Ik heb al meerdere keren gezocht naar die zoekopties, echter, er schijnt weinig te vinden te zijn wat het al kant en klaar heeft liggen...

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Met beide kan je ID3 uitlezen (php heeft zelfs een bijgeleverde lib daarvoor) en zo'n if/else is niet moeilijk om te kijken welke de database in moet.

Mocht je geen lib kunnen vinden voor C# kan je het vrij eenvoudig zelf implementeren

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Borizz schreef op zondag 10 december 2006 @ 12:13:
Op de volgende manier heb je in ieder geval al je albums met een artiest (bij verzamelalbums zal je dus ook maar 1 artiest zien!!).
SQL:
1
SELECT album, artist FROM mp3full GROUP BY album;
Dit soort ranzigheid werkt ook alleen in MySQL. Elke fatsoenlijke database zou een foutmelding geven omdat voor artiest geen aggregerende functie gebruikt wordt en dus niet duidelijk is welke artiest gekozen moet worden.

@bazkar: Precies wat ik ook dacht.

[ Voor 3% gewijzigd door Janoz op 11-12-2006 09:13 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Massiefje
  • Registratie: Mei 2002
  • Laatst online: 12-11 09:57
GX schreef op zondag 10 december 2006 @ 13:02:
Met beide kan je ID3 uitlezen (php heeft zelfs een bijgeleverde lib daarvoor) en zo'n if/else is niet moeilijk om te kijken welke de database in moet.

Mocht je geen lib kunnen vinden voor C# kan je het vrij eenvoudig zelf implementeren
Ik weet het, ik weet het. Ik heb het alleen gelukkig druk genoeg met mijn dagelijkse werkzaamheden, dat ik weinig tijd heb om zoiets compleet van scratch af te gaan bouwen :) Vandaar mijn zoektocht naar iets vergelijkbaars. Kplay heeft wel zoiets en werkt wel aardig, maar is nog niet perfect helaas :)

  • bazkar
  • Registratie: Juni 2001
  • Laatst online: 13-11 16:20
Janoz schreef op zondag 10 december 2006 @ 13:06:
[...]

Dit soort ranzigheid werkt ook alleen in MySQL. Elke fatsoenlijke database zou een foutmelding geven omdat voor artiest geen aggregerende functie gebruikt wordt en dus niet duidelijk is welke artiest gekozen moet worden.
Je kunt bij een echte database uiteraard iets doen als:

SQL:
1
SELECT album, MAX(artist) FROM mp3full GROUP BY album;

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En mijn suggestie verhielp dat dus ook. Als je maar een aggregate function gebruikt bij een dergelijke group by. :)

{signature}

Pagina: 1