2017-04-26 2 views
0

Ich habe eine SQL-Abfrage, die Beiträge aus einer Datenbank holt. Alles funktioniert gut, aber jetzt muss ich die Ergebnisse nach der Anzahl der Kommentare sortieren, die jeder Beitrag hat. Die Kommentare sind in einer separaten Tabelle und sie haben eine Post-ID-Spalte, die es mit dem Post verbindet. Ich muss die Beiträge nach der Anzahl der Kommentartabelle basierend auf einer Shard-ID bestellen? Ich habe alles versucht, aber jedes Mal, wenn ich versuche, etwas zu meiner Frage hinzuzufügen, hört es auf zu laufen und lässt meine Seite leer. Ich brauche Hilfe, um zu wissen, wohin ich die andere JOIN-Anweisung setzen soll. Das ist meine Abfrage:Wie kann ich die Ergebnisse einer SQL-Abfrage anhand der Anzahl einer anderen Tabelle basierend auf einer Shard-ID anordnen?

$union = "UNION ALL 
       ( 
        SELECT DISTINCT wallposts.p_id,wallposts.is_profile_notes,wallposts.times_viewed,wallposts.columnTimesShared, 
        wallposts.marked,wallposts.secure_id,wallposts.reshared,wallposts.group_id, 
        wallposts.totaluploads,wallposts.WallUploadID,wallposts.type, 
        wallposts.value,wallposts.media,wallposts.youtube,wallposts.post_type, 
        wallposts.privacy,wallposts.tagedpersons,wallposts.with_friends_tagged,wallposts.emotion_head,wallposts.selected_emotion,wallposts.title, 
        wallposts.url,wallposts.description,wallposts.cur_image, 
        wallposts.uip,wallposts.likes,wallposts.userid, 
        wallposts.posted_by,wallposts.post as postdata,wallusers.*, 
        UNIX_TIMESTAMP() - wallposts.date_created AS TimeSpent, 

        PosterTable.mem_pic as posterPic, PosterTable.gender as posterGender,PosterTable.oauth_uid as poster_oauth_uid, PosterTable.username as posterUsername, 
        PosterTable.mem_fname as posterFname,PosterTable.work as posterWork, 
        PosterTable.mem_lname as posterLname,walllikes_track.id as PostLikeFound,wallposts.date_created 

        FROM 
         wallusers,wallusers as PosterTable, wallposts 
        LEFT JOIN walllikes_track 
         ON wallposts.p_id = walllikes_track.post_id AND walllikes_track.member_id = ".$user_id." 
        WHERE 
         wallusers.active = 1 
        AND 
         PosterTable.active = 1 
        AND 
         wallposts.group_id IN (".$groups.") 
        AND 
         wallposts.group_id != 0 
        AND 
         PosterTable.mem_id = wallposts.posted_by 
        AND 
         wallposts.marked < ".$this->flagNumber." 
        AND 
         wallusers.mem_id = wallposts.posted_by) "; 

Die Kommentartabelle heißt wallcomments und hat eine Spalte namens post_id. Ich weiß, dass ich JOIN und COUNT verwenden muss, aber ich weiß nicht, wo ich es in meinen aktuellen Code einfügen soll.

+0

Fügen Sie einer Unterabfrage einen zusätzlichen Join hinzu, der die Anzahl der Kommentare pro Post ermittelt und diese verwendet. Ich kann keine genaue Antwort geben, weil so viele Details fehlen und Ihre Anfrage in Unordnung ist. –

+0

Wo soll ich den JOIN einfügen? Das ist mein Dilemma. Immer wenn ich Änderungen an der Abfrage vornehme. Es hört auf, vollständig zu laufen. –

+0

Ja, weil Ihre Anfrage weitläufig und schwer zu verstehen ist, wie es die Frage ist. Nächstes Mal stellen Sie eine bessere Frage, indem Sie ein minimales Beispiel Ihres Problems zeigen. Niemand kann die Abfrage, die Sie jetzt haben, reproduzieren, da nicht einmal Daten vorhanden sind. –

Antwort

0

Versuchen Sie diese Abfrage, ich habe nicht ausgeführt, aber ich habe es aktualisiert.

SELECT wallposts.p_id,wallposts.is_profile_notes,wallposts.times_viewed,wallposts.columnTimesShared, 
       wallposts.marked,wallposts.secure_id,wallposts.reshared,wallposts.group_id, 
       wallposts.totaluploads,wallposts.WallUploadID,wallposts.type, 
       wallposts.value,wallposts.media,wallposts.youtube,wallposts.post_type, 
       wallposts.privacy,wallposts.tagedpersons,wallposts.with_friends_tagged,wallposts.emotion_head,wallposts.selected_emotion,wallposts.title, 
       wallposts.url,wallposts.description,wallposts.cur_image, 
       wallposts.uip,wallposts.likes,wallposts.userid, 
       wallposts.posted_by,wallposts.post as postdata,wallusers.*, 
       UNIX_TIMESTAMP() - wallposts.date_created AS TimeSpent, 

       PosterTable.mem_pic as posterPic, PosterTable.gender as posterGender,PosterTable.oauth_uid as poster_oauth_uid, PosterTable.username as posterUsername, 
       PosterTable.mem_fname as posterFname,PosterTable.work as posterWork, 
       PosterTable.mem_lname as posterLname,walllikes_track.id as PostLikeFound,wallposts.date_created 

       FROM 
        wallusers,wallusers as PosterTable, wallposts 
       WHERE 
        wallusers.active = 1 
       AND 
        PosterTable.active = 1 
       AND 
        wallposts.group_id IN (".$groups.") 
       AND 
        wallposts.group_id != 0 
       AND 
        PosterTable.mem_id = wallposts.posted_by 
       AND 
        wallposts.marked < ".$this->flagNumber." 
       AND 
        wallusers.mem_id = wallposts.posted_by) " AND wallposts.p_id = walllikes_track.post_id AND walllikes_track.member_id = ".$user_id."; 
+0

Vielen Dank für Ihre Antwort, aber welchen Teil haben Sie aktualisiert? Ich sehe keine Änderungen. Ich sehe nichts, was sich auf die Kommentartabelle bezieht. Die Kommentartabelle heißt wallcomments und hat eine Spalte namens post_id. –

+0

Ich habe ** UNION ALL ** ** JOIN ** und ** ON ** -Schlüsselwörter entfernt, weil SQL Ihnen erlaubt, Tabellen ohne JOIN zu verbinden. Zum Beispiel SELECT e.id, e.did, e.name, e.sal, d.department, FROM Mitarbeiter e, Abteilung d WHERE e.did = d.id: –

0

Eine lesbare Abfrage könnte wie folgt aussehen ...

Wenigstens dann hätten wir eine Chance haben.

SELECT DISTINCT p.p_id 
       , p.is_profile_notes 
       , p.times_viewed 
       , p.columnTimesShared 
       , p.marked 
       , p.secure_id 
       , p.media... 
      FROM wallposts p... 
Verwandte Themen