sql >> Databáze >  >> RDS >> Mysql

Použití limitu na levém spojení v mysql

Z úprav a zpětné vazby komentářů je zde dotaz, který si myslím, že hledáte... Nejvnitřnější předběžný dotaz dostane příspěvky a kdo inicioval příspěvek, komentáře a kdo komentáře vložil. Tento vnitřní dotaz je také předřazen podle NEJNOVĚJŠÍCH KOMENTÁŘŮ na začátek podle postID. Na základě toho se připojuji k proměnným sql (@variables), abych @varRow zvýšil pokaždé, když nový komentář, a resetoval zpět na 1 pokaždé, když se změní ID příspěvku (proto vnitřní PreQuery objednává podle ID příspěvku FIRST ). A konečně, pomocí klauzule HAVING, aby byl @varRow komentáře <6, bude mít MAXIMÁLNĚ 5 každého příspěvku.

Pokud chcete omezit, jaké příspěvky se pokoušíte načíst, použil bych klauzuli WHERE (jako datum/čas, pokud je k dispozici) nanejvýš INNER, která generuje „PreQuery“.

select straight_join
      PreQuery.*,
      @varRow := if( @LastPost = PreQuery.PostID, @varRow +1, 1 ) CommentRow,
      @LastPost := PreQuery.PostID PostID2
   from
      ( select
              posts.id PostID,
              posts.body,
              posts.CreatedAt,
              u1.id UserID,
              u1.DisplayName NameOfPoster,
              c.id,
              c.userid CommentUserID,
              c.text CommentText,
              u2.DisplayName CommentUserName
           from
              posts
                 join users u1
                    on posts.ownerUserID = u1.id

                 LEFT JOIN comments c
                    on posts.id = c.PostID

                    join users u2
                       on c.userid = u2.id 
            where
                  posts.id = TheOneParentIDYouWant
               OR posts.parentid = TheOneParentIDYouWant
            order by
               posts.ID,
               c.id desc ) PreQuery,

      (select @varRow := 0, @LastPost = 0 ) SQLVars

   having
      CommentRow < 6   

   order by
      PreQuery.postid,
      CommentRow

--- UPRAVIT --- za komentář MYSLÍM SI, co myslíte tím, ke kterému "nadřazenému příspěvku" jsou komentáře přidruženy, protože mají přímo ID příspěvku. Vzhledem k tomu, že nejvnitřnější dotaz spojuje všechny prvky/tabulky v celé desce, všechny přicházejí na cestu...

Post -> User (to get posting user name )
Post -> Comment (on Common Post ID -- left joined)
        Comment -> User ( to get commenting user name)

Jakmile je TO vše hotovo a seřazeno podle běžného ID příspěvku a nejnovějšího komentáře seřazeného nahoru, použiji @vars na VŠECHNY vrácené řádky. Klauzule HAVING odstraní jakýkoli komentář, jehož sekvence je BEYOND 5, kterou jste hledali.



  1. Jak funguje model služeb PAAS?

  2. PacketTooBigException při provádění sonarové analýzy

  3. Porovnání nabídek Galera Cluster Cloud:Část druhá Google Cloud Platform (GCP)

  4. Jedinečné omezení, jak se vyhnout duplicitám