Díky všem za užitečné reakce.
Trošku upřesním, co tedy vlastně potřebuji. Mám kolekci písniček (řádově tisíce, možná i přes 10k). Přehrávač vypadá a funguje tak, že má 5 sloupců. V prvním jsou playlisty (dynamické neboli chytré, i obyčejné) v dalším je žánr, potom autor (nebo autor alba), album a písnička. Dynamický playlist je jakékoliv SQL query. Každý sloupec filtruje ty za sebou. To znamená, že pokud vyberu dynamický playlist, který omezí výběr na písničky s hodnocením vyšším než 3, a v autorech vyberu třeba Beatles, budou už v dalším sloupci pouze alba obsahující písničky od Beatles s hodnocením vyšším než 3.
Podobně funguje například iTunes (aspoň myslím, nepoužívám ho) nebo Songbird.
Zatím to funguje tak, že všechny písničky jsou v tabulce s cca 30 sloupci. Pokud označím nějaký výběr ve sloupci x, aktualizuji všechny sloupce od x+1 do 5. To znamená, že pokud ve 3. sloupci vyberu Beatles, query pro 4. sloupec bude vypadat následovně: SELECT DISTINCT album, album_art FROM Library WHERE rating > 3 AND (album_artist='The Beatles' or artist ='The Beatles').
Pokud přidávám skladby z knihovny do playlistu, použiju stejný query, ale nasypu tam všechny sloupce. Cesta k souboru je v tabulce použitá jako unikátní klíč.
Je tohle rozumné nebo ne? Šlo by to udělat jinak a líp?
Nemo7> Bohužel nevím, jak prostudovat strukturu databáze jiného programu. Jinak bych to udělal u foobaru, což je podle mě nejlepší desktopový přehrávač s velkým náskokem. Banshee je, pokud vím, psaný v .NET a v tom bych se asi dost topil, takže zdroják mi taky nepomůže. :-(
Logik> Mohl bys to trochu rozvést, jak jsem psal, v databázích se moc nevyznám.
Na závěr ještě doplním pár konkrétních problémů, s jejichž řešením se malinko trápím. Například v sloupci interpretů bych chtěl mít i autory alba. Zcela konkrétně mám například v databázi album "Jako kotě si příst" od Jiřího Grossmanna. Na něm je písnička, kterou zpívá Jiří Schelinger. Chtěl bych mít v jednom sloupci jak Jiřího Grossmana tak i Jiří Schelingera. Zároveň by se ale neměly duplikovat. Momentálně to řeším tak, že si vyjedu sloupce "artist" a "album_artist", které potom projedu, promažu a spojím do jednoho, což není zrovna nejrychlejší. Jde to vyřešit nějak elegantněji?
Druhý konkrétní problém je to, že například mám v seznamu album a písničky z něj jsou ve více adresářích (podle interpretů). V každém adresáři je potom obrázek alba, který je ale stejný. Pokud si vyjedu alba příkazem SELECT DISTINCT album, album_art FROM Library WHERE nějaká podmínka, tak položka album_art (cesta k obalu alba) je různá a album tam mám několikrát duplicitně. Dá se nějak udělat (jinak než manuálně promazat), aby se DISTINCT týkal pouze prvního sloupce?
Ještě jednou díky všem za podnětné rady a nápady.