2017-10-15 9 views
-1

Je dois créer un programme qui stocke les détails du compte des personnes dans un tableau dans SQLite 3. L'une des colonnes est les intérêts, qui est le genre de film préféré de l'utilisateur à regarder. Je dois ensuite leur donner des recommandations de films basées sur ce genre, donc j'ai besoin d'une autre table qui stocke des films de ce genre. Le seul problème est que je ne sais pas comment lier les tables, alors quand la comédie est leur genre préféré, comment sortir des films dans la comédie de genre.Tables de liaison dans SQLite 3 en Python

Voici mon code pour ajouter un nouvel utilisateur:

#function for creating a new customer's account 
def create_id(username, password, name, address, DoB, gender, interestsUp, recent1, recent2, recent3, recent4, recent5, recent6, recent7, recent8, recent9, recent10): 
    #When adding something to a SQLite file, you have to put "" around each item 
    c.execute('INSERT INTO userId(username,password,name,address,DoB,gender,interests, recent1, recent2, recent3, recent4, recent5, recent6, recent7, recent8, recent9, recent10) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', (username, password, name, address, DoB, gender, interestsUp, recent1, recent2, recent3, recent4, recent5, recent6, recent7, recent8, recent9, recent10))#When adding something thats in a variable you put question marks and the name of the variables in brackets 
    conn.commit() 
+0

Si vous affichez du code qui illustre ce que vous avez essayé, vous recevrez probablement des réponses plus spécifiques pour vous aider. Êtes-vous familier avec SQL? Vous avez la bonne idée - une autre table contenant des titres de films est bonne. Vous devriez probablement avoir une table séparée pour le genre en fonction de vos besoins indiqués. Donc vous auriez probablement des "films" et des "genres" de tables. De cette façon, vous pouvez stocker l'index de genre qui correspond à "comédie" par exemple dans la table des utilisateurs sous "intérêts". Et vous interroger la table "films" pour donner à l'utilisateur une liste de films qui correspondent à leur sélection de genre. –

+0

@ RonNorris Je sais que je dois utiliser une clé étrangère, je ne sais pas comment faire cela. –

+0

Vous avez besoin d'une jointure - http://www.sqlitetutorial.net/sqlite-inner-join/ – Alan

Répondre

0

Vous ne devriez pas essayer de stocker toutes les données dans une table. Vous devez utiliser une table pour chaque rubrique (par exemple, les détails de l'utilisateur, les centres d'intérêt), puis exprimer une relation entre les tables. Vous pouvez le faire au moment du design avec une clé étrangère, ce qui aidera à garder les données propres, mais vous devrez également définir la relation lors de l'extraction des données.

Voici un exemple:

Tableau 1: Les utilisateurs
user_id, nom d'utilisateur

Tableau 2: User_Details
user_id, mot de passe, nom, adresse, date de naissance, le sexe

Tableau 3: Favoris
fav_id, user_id, genre

Tableau 4: Films
film_id, film_name, genre

Pour obtenir une liste du genre préféré d'un utilisateur serait alors:

SELECT Films.film_name 
FROM Users 
INNER JOIN Favourites ON Users.user_id = Favourites.user_id 
INNER JOIN Films ON Favourites.genre = Films.genre 
WHERE user_id = ? 

Presque tout le filtrage ici est fait par le INNER JOIN. Cela connectera les tables mais ne retournera que les résultats présents dans les deux tables. Cela signifie que si aucun utilisateur n'a encore soumis de préférences, aucun résultat ne sera renvoyé pour cet utilisateur. L'instruction ON indique à la base de données quelle est la relation.

La sortie sera une liste de films associés à tous les genres que l'utilisateur a favorisés.