2017-06-18 3 views
0

Ich habe 2 Tabellen, eine Users, die id, name, last_name hat und eine Tabelle mit der Bezeichnung Messages, die id, user_id, message hat.Daten von 2 verschiedenen Tabellen aus der relationalen Tabelle erhalten

ich auch eine relationale Tabelle für Benutzer, die anderen Benutzern Follow folgen, in Form von id, user_id, follower_user_id

Ich brauche alle Nachrichten aus dem meinem Benutzer zu erhalten, kann sagen, dass Benutzer 1 und alle Nachrichten von Benutzer 1 Anhänger.

Ich habe bereits eine Abfrage, aber es gibt nicht den richtigen Namen für den aktuellen Benutzer zurück.

Wie kann ich das erreichen? Unten ist meine erste Abfrage, aber es liefert keine korrekten Ergebnisse.

SELECT DISTINCT Messages.content, Messages.user_id, Users.name 
    FROM Follow JOIN Users ON Users.id = Follow.follower_user_id 
    JOIN Messages ON Messages.user_id = Follow.follower_user_id 
    OR Messages.user_id = Follow.user_id WHERE Follow.user_id = 1 

Beispieldaten:

Nachrichten:

id | user_id | message 
1 |  1  | I am a message 
2 |  3  | Here is another message 
3 |  2  | Hello there 

Benutzer:

id | name | last_name 
1 | Test | Last 
2 | Test2 | Last2 
3 | Test3 | Last3 

Folgen:

id | user_id | follower_user_id 
1 |  1  | 2 
2 |  1  | 3 
3 |  3  | 1 
+0

Bearbeiten Sie Ihre Frage und geben Sie Beispieldaten und gewünschte Ergebnisse an. –

Antwort

1

Ich würde so etwas wie dies erwarten:

SELECT m.content, m.user_id, u.name 
FROM messages m JOIN 
    users u 
    ON m.user_id = u.id 
WHERE m.user_id = 1 OR 
     m.user_id IN (SELECT f.follower_user_id 
        FROM Follow f 
        WHERE f.user_id = 1 
        ); 

Sie sollten versuchen, SELECT DISTINCT zu vermeiden, es sei denn, es notwendig ist.

Auch die Art, wie Ihre Frage formuliert ist, könnte die Benutzerspalten in FOLLOW in der falschen Reihenfolge sein (das heißt, es ist möglich, dass Sie in der Unterabfrage f.follower_user_id = 1 möchten).

Verwandte Themen