Avatar billede jumario Nybegynder
29. april 2002 - 12:43 Der er 18 kommentarer og
1 løsning

SQL Select spørgsmål

jeg har en filmdatabase, hvor jeg logisk nok har nogen film. Der kan godt være flere film med samme navn, da det er til en videobutik (skoleprojekt).
Disse film adskiller sig kun ved et unikt ID nummer.

Problemet ligger i at når jeg lister filmene, kommer ID nummeret til filmen ikke til at passe. Dette skyldes at jeg kun vil have listet 1 af hver film.
Dette gør jeg med en SELECT DISTINCT film_titel.
Og i et andet recordset laver jeg så SELECT FilmI
(ville gerne have selected dem i samme recordset, men DISTINCT's funktion ophører jo med at virke hvis jeg inkludere FilmID, da denne er unik).

Derefter, linker jeg så til mine film med en
<a href="filmdetaljer.asp?id=<%=RS2("ID")%>"><=%RS1("film_titel")%></a>

Dette virker også fint, men så snart der kommer 2 film med samme titel, bliver filmid'et "forskudt" da den jo stadig vælger ALLE id'er, men kun de titler der er unikke.

Lidt svært at forklare, men håber i forstår, ellers så spørg igen. Jeg skal gerne uddybe.

På forhånd tak
Avatar billede -mundi- Nybegynder
29. april 2002 - 12:46 #1
Select distinct(film_titel),id,trediefelt Order by film_titel asc
Avatar billede -mundi- Nybegynder
29. april 2002 - 12:46 #2
Har ikke testet det men det burde virke
Avatar billede erikjacobsen Ekspert
29. april 2002 - 12:48 #3
Er din databasemodel så ikke for simpel? Du har redundans i og
med dine filmtitler står der 2 eller flere gange.

Skal du ikke have en tabel med film (hvert titel én gang), og
en tabel med eksemplarer (med fremmednøgle til tabellen med
film)

Skoleprojekt? Så tror jeg du skal lave det "rigtigt" ...;)
Avatar billede jumario Nybegynder
29. april 2002 - 12:53 #4
mundi nej, distinct gælder for alle kolonner, også selvom du sætter titel i parantes, tager den stadig også distinct på ID.

Og til erik jacobsen
Vores lærer kender intet til sql, så man må jo hente hjælp andre steder
min database er meget mere avanceret end det fremstod før, skrev bare min problemstilling med en "opdigtet" database, for at simplificere problemstillingen. Men hvis du har et svar på hvordan jeg kunne løse problemet, frem for at snakke om selve database strukturen, ville det være rart
Avatar billede erikjacobsen Ekspert
29. april 2002 - 12:59 #5
det har jeg da ikke specielt lyst til - at hjælpe dig med en
håbløs struktur ..... ;)

Nå, ja, ok. Du skal have ét tilfældigt ID ud for hver filmtitel  -  er
det nogenlunde forstået?
Avatar billede jumario Nybegynder
29. april 2002 - 13:03 #6
nej nej 1 database
men 2 udtræk til recordset
det ene vælger distinct så hvis jeg f.eks har:
titanic
pulp fiction
apollo 13
apollo 13

så får jeg kun
titanic
pulp fiction
apollo 13

returneret

men det andet udtræk henter ID felter, og de kan jo ikke hentes distinct pga de er unikke

så derfor får jeg f.eks ID
1, 2, 3 ,4

men jeg skulle jogerne kun få 3 tilbage, ligesom jeg fik 3 titler.
kan du forstå ? :)
Avatar billede jumario Nybegynder
29. april 2002 - 13:07 #7
problemet er så at hvis min liste af film hedder

apollo 13
apollo 13
pulp fiction
titanic

så får jeg
apollo 13 = med link til apollo 13
pulp fiction = med link til den anden apollo 13 (her det går galt)
titanic = med link til pulp fiction

osv. så rækkefølgen af links bliver ødelagt når der er dubletter i titler :)
Avatar billede erikjacobsen Ekspert
29. april 2002 - 13:08 #8
Nej, jeg forstår ikke

"apollo 13" har id = 771
"apollo 13" har id = 921

hvilket id vil du have ud. PS: Du *skal* gøre det i en SELECT - det
andet kan du ganske enkelt ikke.
Avatar billede erikjacobsen Ekspert
29. april 2002 - 13:09 #9
Jeg mener: ... i én SELECT
Avatar billede erikjacobsen Ekspert
29. april 2002 - 13:11 #10
Du kan jo prøve

  select filmtitel,max(id) as id from filmtabel group by filmtitel
Avatar billede jumario Nybegynder
29. april 2002 - 13:14 #11
er ik meget for at floode dig, men her får du lige mine selects, så kan du måske se lidt bedre hvad jeg mener :)

sqlstring = "SELECT DISTINCT Titel, genre, aargang, beskrivelse FROM film_t WHERE Upper(titel) LIKE '%" & Ucase(Request.Form("titel")) & "%' AND Upper(aargang) LIKE '%" & Ucase(Request.Form("aargang")) & "%' AND Upper(genre) LIKE '%" & Ucase(Request.Form("genre")) & "%' ORDER BY titel"

sqlstring2 = "SELECT DISTINCT film_t.filmid, film_t.Titel FROM film_t WHERE Upper(titel) LIKE '%" & Ucase(Request.Form("titel")) & "%' AND Upper(aargang) LIKE '%" & Ucase(Request.Form("aargang")) & "%' AND Upper(genre) LIKE '%" & Ucase(Request.Form("genre")) & "%' ORDER BY titel"

oRS1.Open sqlstring
oRS2.Open sqlstring2

og så linket:

              <TD bgcolor="#AAAA00" width="25%"><font face="arial" size="1"><%=oRS("titel")%></TD>
              <TD bgcolor="#AAAA00" width="5%" align=center><font face="arial" size="1"><a href="index.asp?link=visfilm&filmid=<%=oRS2("FilmID")%>"><img src=gfx/video2.gif border=0 align=middle></a></TD>

Dette virker også fint, men er der 2 ens film i toppen, bliver der kun skrevet den ene tittel ud, hvilket er fint, da den samme film ikke skal stå flere gange. Men problemet er i oRS2, som har valgt ID for ALLE film, så derfor bliver film2, linket til film1's dobbeltgænger.
Avatar billede jumario Nybegynder
29. april 2002 - 13:16 #12
Hmm du havde fat i noget af det rigtige med den lille select du gav mig der
Avatar billede erikjacobsen Ekspert
29. april 2002 - 13:17 #13
Jeg ved godt hvad du prøver på. Det kan du ikke. Læs hvad jeg
skriver til dig
Avatar billede jumario Nybegynder
29. april 2002 - 13:18 #14
jeg ser lige om den sql du gav mig virker med lidt modifikationer
Avatar billede erikjacobsen Ekspert
29. april 2002 - 13:18 #15
Ok - når det så virker, så tag lige at få lavet strukturen god. Det
betaler sig til sidst.
Avatar billede jumario Nybegynder
29. april 2002 - 13:19 #16
well vi fik ca. 2 dages undervisning i at lave en struktur, så nej, det er nok ik helt perfekt :P
Avatar billede jumario Nybegynder
29. april 2002 - 13:32 #17
sqlstring2 =              "SELECT titel, MAX(filmid) AS filmid FROM film_t "
    sqlstring2 = sqlstring2 & "WHERE Upper(titel) LIKE '%" & Ucase(Request.Form("titel")) & "%'"
    sqlstring2 = sqlstring2 & "AND Upper(aargang) LIKE '%" & Ucase(Request.Form("aargang")) & "%'"
    sqlstring2 = sqlstring2 & "AND Upper(genre) LIKE '%" & Ucase(Request.Form("genre")) & "%'"
    sqlstring2 = sqlstring2 & " GROUP BY titel"

den virkede sørme.. bygget på din sære sætning Erik =)
kan du snildt forklare hvad jeg gjorde forkert og hva du har gjort rigtigt? :P

Og så post lige som et svar ik? ;)
Avatar billede erikjacobsen Ekspert
29. april 2002 - 13:40 #18
Nej, ingen svar fra mig, for jeg vil ikke have på
samvittigheden at have fået betaling/point for at hjulpet
dig med den her strukturering af dine data.

Group by giver li'så mange poster, som der er
forskellige filmtitler. Du kan så lave forskellige
beregninger på hver gruppe af ens filmtitler.
F.eks. tage maximum, hvorved du får en
"tilfældig" id fra de ens titler.
Avatar billede jumario Nybegynder
30. april 2002 - 11:58 #19
okay your choice. Tak for hjælpen anyways :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester