FAQ |
Kalender |
|
2013-06-20, 11:37 | #1 | ||
|
|||
Medlem
|
Jag har flera rader videos i en rad och varje rad har en kolumn som heter genres.
kolumnen kan innehålla flera genres som är avgränsade. Det kan också innehålla endast 1 genre. Lat som jag är har jag inte strippat den sista '|' men jag hoppas på att det kommer lösas ändå. Såhär kan kolumnen se ut: musical| family|comedy| horror|comedy|action| action|adventure|comedy| Om jag nu vill hämta alla rader där comedy finns med, hur ska jag då gå tillväga för att lösa detta? Måste jag splitta kolumnen i flera bitar först? |
||
Svara med citat |
2013-06-20, 11:56 | #2 | ||
|
|||
Nykomling
|
Hej Anaxa!
Om du behöver få ut rader från kolumnen genre som innehåller ordet "comedy" ska det här fungera bra för MySql. SELECT * FROM videoTable WHERE genre LIKE '%comedy%' Detta var ett sätt att lösa det på. Lycka till! |
||
Svara med citat |
2013-06-20, 11:57 | #3 | ||
|
|||
Medlem
|
Hmm det hade jag inte tänkt på alls faktiskt. Tack du ^_^
|
||
Svara med citat |
2013-06-20, 12:04 | #4 | ||
|
|||
Nykomling
|
Varsågod och det är aldrig fel att fråga (efter att man har provat såklart
|
||
Svara med citat |
2013-06-20, 13:09 | #5 | ||
|
|||
Administratör
|
Värt att notera är att en LIKE '%...%' kommer slöa ner din databas rejält när du får lite mer data. Alternativen är att strukturera din data bra (3NF) eller skapa ett sökindex i annan mjukvara. Ska tabellen inte växa ordentligt med tiden finns det dock ingen poäng att oroa sig (med många frågor så kommer query cachen ta hand om problemet).
__________________
eldefors.com - Personlig (teknik)-blogg |
||
Svara med citat |
2013-06-20, 14:28 | #6 | ||
|
|||
Nykomling
|
Jag håller med Clarence. När du får lite storlek på din databas så bör du funderar på andra lösningar eller åtminstone lägga dit ett index på genre med en längd på kanske 15 char.
Du kan också skapa en separat tabell där filmen finns med flera gånger, en gång per kategori (en->många). Men JOINS är inte heller alltid så snabba men det vi pratar om här att optimera sina sql-frågor blir ju lite överkurs om Anaxas databas innehåller litet antal poster. |
||
Svara med citat |
2013-06-20, 17:32 | #7 | ||
|
|||
Administratör
|
Citat:
Till TS: Strukturen som ges av föregående skribenter är vad som kallas normalisering. Det gör det mycket flexiblare att ställa frågor, uppdatera delar av datan samt att det ger dig bättre förutsättningar att skriva effektiva queries (%..% funkar absolut bara i liten skala, t ex).
__________________
eldefors.com - Personlig (teknik)-blogg |
||
Svara med citat |
2013-06-20, 23:49 | #8 | ||
|
|||
Flitig postare
|
Byggde något likt IMDB för några års sedan och kan meddela herrn att ett 10-tal tabeller till behövs för att få plats med all information.
Just nu har du te.x en director direkt i film-tabellen när en film kan ha flera directors. Ett tips är även att normalisera upp till och med 4NF. På så vis minimerar du duplicering av data. |
||
Svara med citat |
2013-06-20, 14:43 | #9 | ||
|
|||
Medlem
|
2 tabeller
PHP-kod:
Vet inte hur jag kan förbättra sånt här faktiskt. Jag har tänkt en hel del men jag fastnade som sagt vid sökningen efter genre(vilket jag löst nu tack vare corneliisandberg) EDIT: En idé jag har är att skapa en tredje tabell med 3 kolumner (id,movie_id, genre_id). Så för varje genre en film har så lägger jag bara till 1 rad? Är osäker på om det är snabbare eller inte. Det får ni som kan det avgöra ^_^ Senast redigerad av Anaxa den 2013-06-20 klockan 14:46 |
||
Svara med citat |
2013-06-20, 15:15 | #10 | ||
|
|||
Nykomling
|
Tack Anaxa för ditt exempel. Nu blir det lättare att se vart du fastnar vid snabb skummning.
Kolumnen "Genres" i tabellen movies är överflödig på det viset jag tänker mig. Finns många sätt men jag ger dig ett alternativ. // movies ID PRIMARY_KEY Name Date_Added Director URL Likes Views // genres ID PRIMARY_KEY MovieId (detta ger kopplingen till själva filmen ovan) Name Machine_Name (OT:?) Movies låtsas vi innehåller detta 1, Det våras för Bamse, 12345678, George Lucas, www.bamse.se,12,5 2, Gökboet, 12345678, Steven S, www.gok.se,8,6 3,Excorsisten,12245987,Stephen Best,www.exco.se,34,4 Genres innehåller detta 1,1,Cartoon,? 2,1,Barnaction,? 3,1,Icke våld,? 4,2,Thriller,? 5,2,Ondska,? 6,3,Ondska,? För att hämta alla filmer som är "Cartoon" skriv följande fråga SELECT * FROM movies JOIN genres ON genres.MovieId = movies.ID WHERE genres.Name = 'Cartoon' För att hämta alla filmer som är "Ondska" SELECT * FROM movies JOIN genres ON genres.MovieId = movies.ID WHERE genres.Name = 'Ondska' Du ser nu att du alltså kan addera flera filmtitlar via filmens id i tabellen genres via kolumnen MoviesId som vi har där. Som alltid måste alla kolumner och frågor vara rättstavade och konsekventa, något jag frisvär mig ifrån sittandes på jobbet som jag är Men jag hoppas du förstår poängen och vart du fastnade lite i tankesättet. Lycka till och berätta gärna hur det går för dig! |
||
Svara med citat |
Svara |
|
|