2016-08-09 66 views
0

So wählen Sie alle Posts in der Datenbank aus, die Likes haben. Und ich möchte auch, dass alle Beiträge ohne Likes in derselben SQL-Abfrage aufgelistet werden. Das mag in einer Tabelle gespeichert und die jede Tabelle mit einem FremdschlüsselAlle aus db mit likes und ohne likes auswählen

an einem Pfosten wird conncted
SELECT likes.*, posts. * , profile . *, credentials.username, posts.session_sessionid as sSession 
FROM likes, posts, follows, profile, credentials 
WHERE follows.users = posts.userId 
AND profile.userId= follows.users 
AND profile.userId = credentials.profle_userId 
AND posts.session_sessionId IS NOT NULL 
AND likes.idposts = posts.idposts ORDER BY posts.date DESC` 

Antwort

3

Verwenden Sie ein outer join statt. Und wenn Sie die like count das Ergebnis hinzugefügt werden sollen, ist eine Option, eine andere Unterabfrage zu verwenden, die count zu bekommen:

SELECT likes.*, t.likecount, posts.* ,profile.*, credentials.username, 
     posts.session_sessionid as sSession 
FROM posts 
    join follows on follows.users = posts.userId 
    join profile on profile.userId= follows.users 
    join credentials on profile.userId = credentials.profle_userId 
    left join likes on likes.idposts = posts.idposts 
    left join (
     select idposts, count(*) likecount 
     from likes 
     group by idposts 
    ) t on t.idposts = posts.idposts 
WHERE posts.session_sessionId IS NOT NULL 
ORDER BY posts.date DESC` 

Im Allgemeinen würde ich nicht mit Kommas in der from Klausel empfehlen.

+0

Gibt es eine Möglichkeit, wo ich die Abfrage machen, um die Zeilen in der Tabelle "Likes" zu zählen? Ich habe 'count (likes. *)' Versucht, aber ich bekomme einen Fehler. – TheZozoOwner

+0

@TheZozoOwner - fügen Sie einfach einen weiteren "Outer Join" hinzu, indem Sie eine Unterabfrage verwenden, um die Likes per Post zu "zählen". Bearbeitet, um Ihnen ein Beispiel zu zeigen. – sgeddes