webForumDet fria alternativet

Markera sedda filmer i samma lista

Databaser & SQL

3 svar · 529 visningar · startad av Sasch

Medlem sedan nov. 2002830 inlägg
Frågan#1

Tänkte loopa ut en lista med saker som folk borde läsa/se/göra. Problemet blir att få SQL-satsen att markera gjorda saker.

 Movie
 ID  | MovieTitle | ReleaseYear
 int | VarChar    | int

 MovieSeen
 MovieID | UserID | (seen)
  int    | int    | int (1/0)

(Japp, det ska bli multianvändarvänligt)

  SELECT ID, Movietitle, ReleaseYear
  FROM movie
  ORDER BY MovieTitle

Enkelt så här långt.

SELECT ID, Movietitle, ReleaseYear, MovieSeen.Seen
FROM Movie JOIN Movieseen ON (Movie.Id = MovieSeen.MovieId)
WHERE UserID = "& identid &"

Tanken med ovanstående join är rätt (Om man nu bara vill lista de filmer man sett). Problematiken med ovanstående join är ju bara att den loopar ut de jag har sett. Har jag inte sett några får jag inte ut någon.
Det jag vill göra är alltså att lista alla filmer som jag ska se, och sedan få ut en "1/0" som jag sedan kan rödmarkera filmerna som jag sett i samma lista.

exempel skrev:

Terminator: Salvation (2009)
The Sixth Sense (1999) --- Seen
Finding Nemo (2003) --- Seen

Ska jag kanske beblanda mig med en INNER JOIN istället?

Medlem sedan dec. 20025 483 inlägg
#2
SELECT ID, Movietitle, ReleaseYear, MovieSeen.Seen, CASE WHEN MovieSeen.MoveId IS NULL THEN 'Not seen' ELSE 'Seen' END AS isSeen
FROM Movie LEFT JOIN Movieseen ON (Movie.Id = MovieSeen.MovieId)
AND UserID = "& identid &"

Ovanstående syntax är för (åtminstone) MSSQL och MySQL.

Fältet 'seen' behöver du inte ha med. Det räcker med att användaren finns i tabellen MovieSeen för att denne skall ha sett filmen.

Medlem sedan nov. 2002830 inlägg
#3

YES! Det funkar alldeles utmärkt! Tack :)

Medlem sedan jan. 20023 327 inlägg
#4

Sasch skrev:

Ska jag kanske beblanda mig med en INNER JOIN istället?

Det var INNER JOIN som du använde. Skriver man bara JOIN så är det samma sak som INNER JOIN.

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)