Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng giới hạn cho lần tham gia bên trái trong mysql

Từ các chỉnh sửa và phản hồi nhận xét, đây là truy vấn mà tôi nghĩ bạn đang tìm kiếm ... Phần lớn bên trong sẽ truy vấn trước các bài đăng và ai là người khởi xướng bài đăng, nhận xét và ai đã đăng nhận xét. Truy vấn bên trong này cũng được sắp xếp trước với NHẬN XÉT GẦN ĐÂY nhất ở đầu mỗi postID. Sử dụng kết quả của điều đó, tôi đang kết hợp với các biến sql (@variables) để tăng @varRow mỗi khi nhận xét mới và đặt lại về 1 mỗi khi ID bài đăng thay đổi (do đó, các đơn đặt hàng PreQuery bên trong theo ID bài đăng FIRST ). Cuối cùng, sử dụng mệnh đề HAVING để có số lượng @varRow của nhận xét <6 sẽ nhận được nhiều nhất là 5 cho mỗi bài đăng.

Nếu bạn muốn giới hạn những bài đăng nào bạn đang cố gắng truy xuất, tôi sẽ áp dụng mệnh đề WHERE (chẳng hạn như ngày / giờ nếu có) ở phần INNER hầu hết tạo ra "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

--- CHỈNH SỬA --- mỗi bình luận Tôi NGHĨ bạn hiểu ý của "Bài đăng dành cho cha mẹ" mà các nhận xét được liên kết với là vì chúng có ID bài đăng trực tiếp. Vì truy vấn bên trong nhất thực hiện sự kết hợp của tất cả các phần tử / bảng trên bảng, nên tất cả đều sắp xảy ra ...

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

Khi ĐÓ đã hoàn tất và được sắp xếp theo ID bài đăng chung và nhận xét gần đây nhất được sắp xếp lên trên cùng, sau đó tôi áp dụng @vars đối với TẤT CẢ các hàng được trả về. Mệnh đề HAVING sẽ loại bỏ bất kỳ nhận xét nào mà trình tự của nó là SAU 5 bạn đang tìm kiếm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn có thể thực hiện vòng lặp Cho mỗi hàng bằng MySQL không?

  2. Làm cách nào để truy xuất danh sách các ID đã tạo để chèn hàng loạt trong Bản ghi Hoạt động?

  3. Di chuyển bảng từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong MySQL

  4. onbeforeprint () và onafterprint () tương đương cho các trình duyệt không phải IE

  5. Trình phân tích truy vấn MySql - giải pháp miễn phí