2017-05-28 1 views
0

Je veux simplement créer une nouvelle liste de lecture contenant les 10 morceaux les plus longs de toutes les pistes enregistrées. Voici mon code et le schéma ci-dessous, quelqu'un colud s'il vous plaît expliquer comment je peux associer les touches foriegn de Playlist et Track à PlaylistTrack?Association de clés étrangères dans SQLite3

INSERT INTO Playlist (PlaylistID, Name) 
VALUES (19, 'Background Music'); 

SELECT TrackID, Name, Millisecond 
FROM Track 
ORDER BY Millisecond DESC 
LIMIT 10 
JOIN Track.TrackID = PlaylistTrack.TrackID 
WHERE Playlist.Name = 'Background Music'; 

SCHEMA:

CREATE TABLE Playlist 
(
    PlaylistID INTEGER PRIMARY KEY NOT NULL, 
    Name TEXT 
); 



    CREATE TABLE PlaylistTrack 
    (
     PlaylistID INTEGER NOT NULL, 
     TrackID INTEGER NOT NULL, 
     PRIMARY KEY (PlaylistID, TrackID), 
     FOREIGN KEY (PlaylistID) REFERENCES Playlist (PlaylistID) 
        ON DELETE NO ACTION ON UPDATE NO ACTION, 
     FOREIGN KEY (TrackID) REFERENCES Track (TrackID) 
        ON DELETE NO ACTION ON UPDATE NO ACTION 
    ); 




    CREATE TABLE Track 
(
    TrackID INTEGER PRIMARY KEY NOT NULL, 
    Name TEXT NOT NULL, 
    AlbumID INTEGER, 
    MediaTypeID INTEGER NOT NULL, 
    GenreID INTEGER, 
    Composer TEXT, 
    Millisecond INTEGER NOT NULL, 
    Byte INTEGER, 
    UnitPrice REAL NOT NULL, 
    FOREIGN KEY (AlbumID) REFERENCES Album (AlbumID) 
       ON DELETE NO ACTION ON UPDATE NO ACTION, 
    FOREIGN KEY (GenreID) REFERENCES Genre (GenreID) 
       ON DELETE NO ACTION ON UPDATE NO ACTION, 
    FOREIGN KEY (MediaTypeID) REFERENCES MediaType (MediaTypeID) 
       ON DELETE NO ACTION ON UPDATE NO ACTION 
); 

Merci.

Répondre

0

Essayez de placer la clause LIMIT à la fin de la requête où il appartient:

SELECT 
    t.TrackID, t.Name, t.Millisecond 
FROM Track t 
INNER JOIN PlaylistTrack p 
    ON t.TrackID = p.TrackID 
WHERE p.Name = 'Background Music' 
ORDER BY t.Millisecond DESC 
LIMIT 10 
+0

Hey merci fot l'aide, je recevais une erreur avec ce code j'ai donc essayé de tester quelques changements. Ce code ne me donne aucune erreur mais aussi aucune réponse haha, pourriez-vous me donner des indications? SELECT t.TrackID, t.Name, t.Millisecond de la piste t INNER JOIN PlaylistTrack p SUR t.TrackID = p.TrackID OÙ p.PlaylistID = 19 ORDER BY t.Millisecond DESC LIMIT dix; –

+0

@JamesPeters Ma réponse avait un point-virgule. Si vous avez coupé et collé aveuglément ce que j'ai donné plus haut, vous auriez eu une erreur. En ce qui concerne votre deuxième requête, il n'y a peut-être aucun enregistrement correspondant dans votre table. –