Här kommer ännu en fråga om SQL. Det tror jag inte även om jag skulle skapa en tabell och göra en WHERE IN Tack för hjälpen. Det är så man lär sig, har gjort ungefär likadant. Det här fungerar och verkar bra men jag undrar jag och så lär man sig lite mer :) Den där frågan gör troligtvis inte så som du vill. Du kan också för övrigt korta ner din enorma sqlsats genom att skriva: Du kan också för övrigt korta ner din enorma sqlsats genom att skriva:Ännu en SQL-fråga
Kan en fråga bli för lång?
Jag har här en SQL-sats som är rätt så lång. Skulle jag plocka bort en del av Or-satserna så fungerar det bra.
Vad är det som jag inte förstår??
Allt står rätt i min fråga även om det jag visar här kan se konstigt ut.
Min fråga ser ut så här:
SELECT * FROM Songs WHERE (Category = 'Musik') AND (Genre = 'Acapella') Or (Genre = 'Acid') Or (Genre = 'Acid Jazz') Or (Genre = 'Acid Punk') Or (Genre = 'Acoustic') Or (Genre = 'Alternative') Or (Genre = 'Alternative Rock') Or (Genre = 'Ambient') Or (Genre = 'Avantgrass') Or (Genre = 'Ballad') Or (Genre = 'Bass') Or (Genre = 'Beat') Or (Genre = 'Bebob') Or (Genre = 'Big Band') Or (Genre = 'Black Metal') Or (Genre = 'Bluegrass') Or (Genre = 'Blues') Or (Genre = 'Booty Bass') Or (Genre = 'Britpop') Or (Genre = 'Cabaret') Or (Genre = 'Celtic') Or (Genre = 'Chamber Music') Or (Genre = 'Chanson') Or (Genre = 'Chotus') Or (Genre = 'Christian Gangsta Rap') Or (Genre = 'Christian Pop') Or (Genre = 'Christian Rock') Or (Genre = 'Classic rock') Or (Genre = 'Classical') Or (Genre = 'Club') Or (Genre = 'Club-House') Or (Genre = 'Comedy') Or (Genre = 'Contemporary Christian') Or (Genre = 'Country') Or (Genre = 'Crossover') Or (Genre = 'Cult') Or (Genre = 'Dance') Or (Genre = 'Dance Hall') Or (Genre = 'Darkwave') Or (Genre = 'Death Metal') Or (Genre = 'Disco') Or (Genre = 'Dream') Or (Genre = 'Drum & Bass') Or (Genre = 'Drum Solo') Or (Genre = 'Duet') Or (Genre = 'Easy Listening') Or (Genre = 'Electronic') Or (Genre = 'Ethnic') Or (Genre = 'Eurodance') Or (Genre = 'Euro-House') Or (Genre = 'Euro-Techno') Or (Genre = 'Fast Fusion') Or (Genre = 'Folk') Or (Genre = 'Folklore') Or (Genre = 'Folk-Rock') Or (Genre = 'Freestyle') Or (Genre = 'Funk') Or (Genre = 'Fusion') Or (Genre = 'Game') Or (Genre = 'Gangsta') Or (Genre = 'Goa') Or (Genre = 'Gospel') Or (Genre = 'Gothic') Or (Genre = 'Gothic Rock') Or (Genre = 'Grunge') Or (Genre = 'Hard Rock') Or (Genre = 'Hardcore') Or (Genre = 'Heavy Metal') Or (Genre = 'Hip-Hop') Or (Genre = 'House') Or (Genre = 'Humour') Or (Genre = 'Indie') Or (Genre = 'Industrial') Or (Genre = 'Instrumental') Or (Genre = 'Instrumental Pop') Or (Genre = 'Instrumental Rock') Or (Genre = 'Jazz') Or (Genre = 'Jazz+Funk') Or (Genre = 'Jungle') Or (Genre = 'Latin') Or (Genre = 'Lo-Fi') Or (Genre = 'Meditative') Or (Genre = 'Merengue') Or (Genre = 'Metal') Or (Genre = 'Musical') Or (Genre = 'National Folk') Or (Genre = 'Native US') Or (Genre = 'Negerpunk') Or (Genre = 'New Age') Or (Genre = 'New Wave') Or (Genre = 'Noise') Or (Genre = 'Oldies') Or (Genre = 'Opera') Or (Genre = 'Other') Or (Genre = 'Polka') Or (Genre = 'Polsk Punk') Or (Genre = 'Pop') Or (Genre = 'Pop/Funk') Or (Genre = 'Pop-Folk') Or (Genre = 'Porn Groove') Or (Genre = 'Power Ballad') Or (Genre = 'Pranks') Or (Genre = 'Primus') Or (Genre = 'Progressive Rock') Or (Genre = 'Psychadelic') Or (Genre = 'Psychedelic Rock') Or (Genre = 'Punk') Or (Genre = 'Punk Rock') Or (Genre = 'R&B') Or (Genre = 'Rap') Or (Genre = 'Rave') Or (Genre = 'Reggae') Or (Genre = 'Retro') Or (Genre = 'Revival') Or (Genre = 'Rhytmic Soul') Or (Genre = 'Rock') Or (Genre = 'Rock & Roll') Or (Genre = 'Salsa') Or (Genre = 'Samba') Or (Genre = 'Satire') Or (Genre = 'Showtunes') Or (Genre = 'Ska') Or (Genre = 'Slow Jam') Or (Genre = 'Slow Rock') Or (Genre = 'Sonata') Or (Genre = 'Soul') Or (Genre = 'Sound Clip') Or (Genre = 'Soundtrack') Or (Genre = 'Southern Rock') Or (Genre = 'Space') Or (Genre = 'Speech') Or (Genre = 'Swing') Or (Genre = 'Symphonic Rock') Or (Genre = 'Symphony') Or (Genre = 'Tango') Or (Genre = 'Techno') Or (Genre = 'Techno-Industrial') Or (Genre = 'Terror') Or (Genre = 'Top 40') Or (Genre = 'Trailer') Or (Genre = 'Trance') Or (Genre = 'Trash Metal') Or (Genre = 'Tribal') Or (Genre = 'Trip-Hop') Or (Genre = 'Vocal')
Sv: Ännu en SQL-fråga
Snabbt googlingsexempel från W3-schools
SELECT column_name(s)
FROM table_name
WHERE column_name IN (SELECT...)
Den lösningen är i mitt tycke prydligare och det finns inte någon anledning att leta igenom frågan om du behöver ändra samt att du kan eventuellt använda den till andra frågor. Du kan t.ex. ha en kolumn som talar om vilken fråga det tillhör för att göra det ännu enklare, det sistnämnda inte helt strukturerat och optimalt men fungerar i vilket fall :)
//AnnSv:Ännu en SQL-fråga
Jag ska prova detta.
Jag är som sagt inte någon expert på SQL men jag gör så gott jag kan.
Tack.Sv: Ännu en SQL-fråga
//AnnSv: Ännu en SQL-fråga
"...WHERE (Category = ''Musik'') AND (Genre = ''Acapella'') Or (Genre = ''Acid'') Or (Genre = ''Acid Jazz'')..."
Den plockar ut låtar som har både kategorin Musik och genre Acapella eller låtar som har bara har genre Acid eller låtar som bara har genre Acid Jazz osv. Kravet på kategorin Musik ligger endast på första genren, inte på alla som jag antar att du vill?
Det löser du i så fall genom att sätta alla genre-vilkor inom en gemensam parentes.
SELECT * FROM Songs WHERE Category = ''Musik'' AND (Genre = ''Acapella'' Or Genre = ''Acid'' Or Genre = ''Acid Jazz'' Or Genre = ''Acid Punk'' Or
Genre = ''Acoustic'' Or Genre = ''Alternative'' Or Genre = ''Alternative Rock'' Or Genre = ''Ambient'' Or Genre = ''Avantgrass'' Or Genre = ''Ballad'' Or
Genre = ''Bass'' Or Genre = ''Beat'' Or Genre = ''Bebob'' Or Genre = ''Big Band'' Or Genre = ''Black Metal'' Or Genre = ''Bluegrass'' Or Genre = ''Blues'' Or
Genre = ''Booty Bass'' Or Genre = ''Britpop'' Or Genre = ''Cabaret'' Or Genre = ''Celtic'' Or Genre = ''Chamber Music'' Or Genre = ''Chanson'' Or Genre
= ''Chotus'' Or Genre = ''Christian Gangsta Rap'' Or Genre = ''Christian Pop'' Or Genre = ''Christian Rock'' Or Genre = ''Classic rock'' Or Genre
= ''Classical'' Or Genre = ''Club'' Or Genre = ''Club-House'' Or Genre = ''Comedy'' Or Genre = ''Contemporary Christian'' Or Genre = ''Country'' Or
Genre = ''Crossover'' Or Genre = ''Cult'' Or Genre = ''Dance'' Or Genre = ''Dance Hall'' Or Genre = ''Darkwave'' Or Genre = ''Death Metal'' Or Genre
= ''Disco'' Or Genre = ''Dream'' Or Genre = ''Drum & Bass'' Or Genre = ''Drum Solo'' Or Genre = ''Duet'' Or Genre = ''Easy Listening'' Or Genre
= ''Electronic'' Or Genre = ''Ethnic'' Or Genre = ''Eurodance'' Or Genre = ''Euro-House'' Or Genre = ''Euro-Techno'' Or Genre = ''Fast Fusion'' Or Genre
= ''Folk'' Or Genre = ''Folklore'' Or Genre = ''Folk-Rock'' Or Genre = ''Freestyle'' Or Genre = ''Funk'' Or Genre = ''Fusion'' Or Genre = ''Game'' Or Genre
= ''Gangsta'' Or Genre = ''Goa'' Or Genre = ''Gospel'' Or Genre = ''Gothic'' Or Genre = ''Gothic Rock'' Or Genre = ''Grunge'' Or Genre = ''Hard Rock'' Or
Genre = ''Hardcore'' Or Genre = ''Heavy Metal'' Or Genre = ''Hip-Hop'' Or Genre = ''House'' Or Genre = ''Humour'' Or Genre = ''Indie'' Or Genre
= ''Industrial'' Or Genre = ''Instrumental'' Or Genre = ''Instrumental Pop'' Or Genre = ''Instrumental Rock'' Or Genre = ''Jazz'' Or Genre = ''Jazz+Funk''
Or Genre = ''Jungle'' Or Genre = ''Latin'' Or Genre = ''Lo-Fi'' Or Genre = ''Meditative'' Or Genre = ''Merengue'' Or Genre = ''Metal'' Or Genre = ''Musical''
Or Genre = ''National Folk'' Or Genre = ''Native US'' Or Genre = ''Negerpunk'' Or Genre = ''New Age'' Or Genre = ''New Wave'' Or Genre = ''Noise'' Or
Genre = ''Oldies'' Or Genre = ''Opera'' Or Genre = ''Other'' Or Genre = ''Polka'' Or Genre = ''Polsk Punk'' Or Genre = ''Pop'' Or Genre = ''Pop/Funk'' Or
Genre = ''Pop-Folk'' Or Genre = ''Porn Groove'' Or Genre = ''Power Ballad'' Or Genre = ''Pranks'' Or Genre = ''Primus'' Or Genre = ''Progressive Rock'' Or
Genre = ''Psychadelic'' Or Genre = ''Psychedelic Rock'' Or Genre = ''Punk'' Or Genre = ''Punk Rock'' Or Genre = ''R&B'' Or Genre = ''Rap'' Or Genre
= ''Rave'' Or Genre = ''Reggae'' Or Genre = ''Retro'' Or Genre = ''Revival'' Or Genre = ''Rhytmic Soul'' Or Genre = ''Rock'' Or Genre = ''Rock & Roll'' Or
Genre = ''Salsa'' Or Genre = ''Samba'' Or Genre = ''Satire'' Or Genre = ''Showtunes'' Or Genre = ''Ska'' Or Genre = ''Slow Jam'' Or Genre = ''Slow Rock'' Or
Genre = ''Sonata'' Or Genre = ''Soul'' Or Genre = ''Sound Clip'' Or Genre = ''Soundtrack'' Or Genre = ''Southern Rock'' Or Genre = ''Space'' Or Genre
= ''Speech'' Or Genre = ''Swing'' Or Genre = ''Symphonic Rock'' Or Genre = ''Symphony'' Or Genre = ''Tango'' Or Genre = ''Techno'' Or Genre = ''Techno-Industrial'' Or Genre = ''Terror'' Or Genre = ''Top 40'' Or Genre = ''Trailer'' Or Genre = ''Trance'' Or Genre = ''Trash Metal'' Or Genre = ''Tribal'' Or Genre = ''Trip-Hop'' Or Genre = ''Vocal'')
Sen så har du inte normaliserat tabellen. Du bör göra en separat tabell som innehåller alla genrer och sen gärna en till tabell som kopplar ihop ett låt-ID med en ett genre-ID. På så sätt kan du dessutom ha flera genrer till varje låt.
Låt-tabell:
ID, Låtnamn
Genre-tabell:
ID, Genre
Kopplingstabell:
Låt-ID, Genre-ID
Vill du bara ha en genre per låt så kan du förenkla lite.
Låt-tabell:
ID, Låtnamn, Genre-ID
Genre-tabell:
ID, Genre
Sv:Ännu en SQL-fråga
where category='musik' and genre in('acapella','acid','azid jazz')
Eller det kanske är de flesta , så kan du istället välja vilka som INTE skall vara med :)
where category='musik' and genre NOT in('acapella','acid','azid jazz')
Sv:Ännu en SQL-fråga
where category='musik' and genre in('acapella','acid','azid jazz')
Eller det kanske är de flesta , så kan du istället välja vilka som INTE skall vara med :)
where category='musik' and genre NOT in('acapella','acid','azid jazz')