Question

Je suis nouveau à la structure de base de données. Je suis en train de créer une application qui permet aux utilisateurs comme certaines entrées, mais je veux être en mesure de lier aime aux utilisateurs afin que je puisse changer les visuels avant / après l'action comme.

Je pense que de la recherche que je devrais avoir un « entrées » et la table des utilisateurs de puis une table « aime » qui lie les deux à l'autre.

La seule chose que je ne suis pas sûr de est, lors de l'obtention et l'affichage du contenu ... comment pourrais-je écrire les requêtes? Si je fais une recherche toutes les entrées dont j'ai besoin, je ne puis revenir en arrière et d'interroger individuellement chacun pour voir si elle a comme lié à elle pour l'utilisateur actuel? Cela semble que cela pourrait être une opération coûteuse. Y at-il un moyen plus efficace?

L'espoir qui fait sens, Merci.

Était-ce utile?

La solution

Je pense que vous avez la conception de base de données tout à l'esprit. En ce qui concerne les requêtes sont concernées, prend en tableaux tels que:

Utilisateurs

ID | Name
1  | Bob
2  | Sally

Entrées

ID | Name
1  | Red
2  | Blue
3  | Yellow

Aime

UserID | EntryID
1      | 1
1      | 2
2      | 2
2      | 3

On peut donc dire Bob aime rouge et bleu tout en aime Sally bleu et jaune. Ainsi, une requête pour récupérer toutes les entrées, plus un indicateur de ce que Bob aime serait:

SELECT 
e.ID,
e.Name,
l.UserID
FROM Entries e LEFT JOIN Likes l ON l.EntryID = e.ID
WHERE l.UserID = 1 -- Bob's User ID
ORDER BY e.Name

retournerait

ID | Name   | UserID
2  | Blue   | 1
1  | Red    | NULL
3  | Yellow | 1

La colonne UserID indique si Bob aime l'entrée ou non - une valeur NULL est Non et une valeur est Oui.

Autres conseils

En supposant que vous avez une table entrées avec une entity_id colonne (et tout ce que vous stockez sur l'entité) et une seconde UserLikes de table qui contient les colonnes id_utilisateur et entity_id, vous devez faire ceci:

 SELECT Entries.col1, Entries.col1 . . ., UserLikes.user_id
     FROM Entries LEFT OUTER JOIN UserLikes ON 
         Entries.entity_id = UserLikes.entity_id
     WHERE UserLikes.user_id = :user_id
         AND Entity.col_whatever = :whatever

Dans cet exemple, Entries.col1, Entries.col2. . . la liste des colonnes que vous voulez revenir sur les entrées. Le: user_id est un paramètre qui contient l'identifiant de l'utilisateur que vous êtes en train d'essayer d'afficher les entrées pour. Et la dernière ligne est debout pour toute limite que vous voulez mettre sur les entrées sont retournées.

Cette requête vous donnera une ligne pour chaque entrée que vous recherchez. Vous pouvez vérifier la valeur de la colonne retournée user_id. Si c'est NULL, alors il n'a pas été aimé par l'utilisateur, si elle contient l'identifiant de l'utilisateur, il a été apprécié par l'utilisateur.

Je pense que u peut récupérer les entrées et interroger la table de gens en même temps pour obtenir si l'utilisateur actuel aime l'entrée exécuter une procédure stockée. Alors u peut contrôler la valeur de l'ensemble des données renvoyées par la requête par exemple un retour Colum pour le texte d'entrée et une colonne booléenne pour évaluer l'utilisateur actuel aime ... De cette façon, vous aurez au moins un paramètre de la procédure stockée pour indiquer qui est l'utilisateur actuel

J'espère que cette aide idée u ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top