Abrufen von „likes“ gebunden Benutzer aus einer Datenbank
-
25-09-2019 - |
Frage
Ich bin neu in der Datenbankstruktur. Ich versuche, eine App zu erstellen, mit der Benutzer wie bestimmte Eingaben erlaubt, aber ich möchte in der Lage sein mag, um Benutzer zu binden, so dass ich die Visuals vor / nach dergleichen Aktion ändern können.
ich glaube, von der Forschung, dass ich ein ‚Einträge‘ habe und ‚Benutzer‘ Tisch und dann einen ‚mag‘ Tisch bindet die beide zueinander stehen.
Das einzige, was ich bin nicht sicher ist, wenn immer und der Inhalt angezeigt wird ... wie würde ich die Abfragen schreiben? Wenn ich Abfrage für alle Einträge ich brauche, kann ich dann zurückgehen und jeweils einzeln abfragen, um zu sehen, ob es eine hat wie für den aktuellen Benutzer an sie gebunden? Das scheint wie könnte es ein kostspieliger Vorgang sein. Gibt es eine effizientere Art und Weise?
Hope, das macht Sinn, Danke.
Lösung
Ich glaube Ihnen, die richtige Datenbank-Design im Sinn haben. Soweit Abfragen betroffen sind, übernehmen Tabellen als solche:
Nutzer
ID | Name 1 | Bob 2 | Sally
Einträge
ID | Name 1 | Red 2 | Blue 3 | Yellow
Was gefaellt
UserID | EntryID 1 | 1 1 | 2 2 | 2 2 | 3
So können wir sagen, Bob mag Rot und Blau, während Sally Blau und Gelb mag. So eine Abfrage alle Einträge abgerufen werden, sowie ein Indikator dessen, was Bob Gleichen wäre:
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
Dies würde zurückkehren
ID | Name | UserID 2 | Blue | 1 1 | Red | NULL 3 | Yellow | 1
Die UserID Spalte zeigt an, ob Bob den Eintrag gefällt oder nicht - ein NULL ist Nein und ein Wert ist Ja.
Andere Tipps
Angenommen, Sie eine Tabelle Einträge mit einer Spalte ENTITY_ID haben (und was sonst speichern Sie über die juristische Person) und eine zweite Tabelle UserLikes, dass die Spalten user_id und ENTITY_ID enthält, würden Sie wie folgt vor:
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
In diesem Beispiel Entries.col1, Entries.col2. . . ist die Liste der Spalten, die Sie über die Einträge zurück bekommen möchten. Der: user_id ist ein Parameter, der die ID des Benutzers enthält, die Sie gerade versuchen, Einträge angezeigt werden für. Und die letzte Zeile im Stehen für was auch immer Einschränkungen Sie wollen auf die Einträge setzen, werden zurückgegeben.
Diese Abfrage wird Ihnen eine Zeile für jeden Eintrag Sie gesucht haben. Sie können den Wert überprüfen, die zurückgegebene Spalte user_id. Wenn es NULL dann wurde es vom Benutzer nicht mag, wenn es die Benutzer-ID enthält, durch den Anwender gemocht wurde.
Ich denke, u die Einträge abrufen können und Abfrage der Tabelle zur gleichen Zeit mag zu erhalten, wenn der aktuelle Benutzer den Eintrag mag eine gespeicherte Prozedur ausgeführt wird. So u den Wert des Satzes von Daten steuern kann, die von der Abfrage beispielsweise Rückkehr eine colum für den Eintrag Text und einen boolean Spalts wertet die aktuellen Benutzer mögen ... Auf diese Weise zurückgegeben werden Sie zumindest ein Parameter für die gespeicherte Prozedur um anzuzeigen, wer der aktuelle Benutzer
Ich hoffe, dass diese Idee Hilfe u ...