2017-08-16 4 views
1

Diese Abfrage funktioniert einwandfrei, wenn user_id = 3 die einzige Person ist, die einem bestimmten Thema in der Zinstabelle folgt. Die Zinstabelle enthält ID, Follower_ID und (Interest_ID, die Themen wie Sport sind).SQL-Abfragen Abrufen von Datensätzen aus Tabelle

Die Posts-Tabelle enthält eine Spalte für Themen, die Themen sind, denen Benutzer folgen können und sobald Sie einem Thema folgen, füge ich es in die Interessen-Tabelle ein. Jetzt versuche ich, von Benutzern erstellte Posts abzurufen, die Posts, die ich erhalten möchte, können entweder von mir gemachte Posts sein (es gibt eine Spalte in Posts namens user_id, die die ID des Benutzers ist, der sie gepostet hat) oder Posts von Themen, die ich bin Folgendes.

Das Problem hier ist, wenn ich diese Abfrage ausführen, bekomme ich doppelte Beiträge, weil ein anderer Benutzer das gleiche Thema verfolgt.

Antwort

1

Wenn Sie keine Felder von interests abfragen, sollte es wahrscheinlich nicht in der Verknüpfung sein. Wenn Sie die Verwendung in einen Zustand in oder exists umwandeln, werden Ihre Duplikate eliminiert. Außerdem sollten Sie beachten, dass implizite Joins (d. H. Das Auflisten mehrerer Tabellen in der from-Klausel) als eine schlechte Vorgehensweise angesehen werden und stattdessen stattdessen eine explizite Verknüpfung verwendet werden sollte:

SELECT posts.id, posts.body, posts.posted_at, posts.likes, posts.dislikes, 
     users.userName 
FROM  posts 
JOIN  users ON users.id = posts.user_id 
WHERE posts.user_id = 3 OR 
     posts.topics IN (SELECT interest_id 
          FROM interests 
          WHERE follower_id = 3) 
ORDER BY posts.posted_at DESC 
Verwandte Themen