Làm thể nào để có thể làm chức năng sắp xếp truyện theo lượt view

Xin chào mấy bác,
Mình đang muốn làm một chức năng sắp xếp truyện theo lượt view theo ngày, tháng hoặc năm tựa như trang nettruyen
Mình cũng đã vắt óc ra suy nghĩ mấy ngày nhưng không tài nào nghĩ ra được cách nào trừ ra cách mỗi lượt view thì insert vào một hàng dữ liệu (cách này rất hao cho database nên mình không muốn sử dụng)
Mọi người giúp mình với

  • Bạn code tay bằng SQL thuần túy hay dùng ORM (ORM thì khả năng cao là đã có hỗ trợ sort).
  • Nếu web đồ án thì cách đếm view mình có comment ở đây, bạn tham khảo Làm chức năng đếm lượt xem như thế nào? (Còn nếu thực tế thì vẫn dùng cách này được, thêm một filter nữa get IP nếu IP nào làm tăng view nhiều thì reject reuqest. Theo như mình đã test thì ở chung cư, KTX chung đường mạng nên nhiều thiết bị cùng public IP nên cũng không chính xác lắm, nhưng xác suất ở chung nhà truy cập cùng web khá thấp)
1 Like

Mình code tay bằng sql thuần.
Với lại nếu mình sử dụng +1 vào views tổng thì sẽ không sắp xếp được theo ngày, tháng, năm của views mà mình chỉ lấy được cái tổng từ trước tới giờ th

Bác thường bố chí database như thế nào để có thể sắp xếp được lượng views theo (ngày, tháng, năm) của sản phẩm vậy bác

Database SQL là được, MySQL cho nhẹ. Tạo thêm 1 bảng view gồm các fileld

  • PostId
  • UserId
  • ngàyXem
  • IPngườiXem

Trong đó:

  • PostId và UserId gộp thành khóa chính.
  • PostId tham chiếu (khóa ngoại) tới bảng Post (quan hệ nhiều - 1 (một post có nhiều view)
  • Tương tự với bảng user (quan hệ nhiều nhiều)
  • Dựa vào ngày xem và IP là vẽ được biểu đồ vị trí người xem và phân bổ lượt xem như youtube

1 Like

Nếu vậy thì một ngày của bảng view nó sẽ nhận rất nhiều lần insert.
Có cách nào để kết hợp với backend(hoặc không kết hợp) để có thể tiết kiệm số lần insert mà vẫn giữ nguyên mục đích cũ không ông

Ơ kìa, có sao đâu bạn, database chứa hàng triệu record cũng được mà. Chưa gì đã sợ hư hại database rồi.

Nếu sợ tốn database, không lưu view vào db thì cài google analytics vào để nó đếm thay cho.

2 Likes

Vậy chắc mình sài theo cách insert từng lượt views.
Dù gì mình cũng làm đồ án sinh viên th chắc không lớn tới mức phải sài tạm google analytics

Đúng là chủ topic lo bò trắng răng khi lo sợ cơ sở dữ liệu không đủ sức chứa. Trong khi đó, MySQL đã được dùng cho những cơ sở dữ liệu lên đến hàng TB. Giả sử trang web có hàng trăm bài viết, mỗi bài viết có 100 lượt view trên ngày, thì cũng chỉ có 10-20 ngàn dòng chứ có bao nhiêu, trong khi đó giới hạn có cả tỉ biểu ghi. Nếu một bảng như bạn MeoMeo gợi ý ở trên PostId, UserId, ngàyXem, IPngườiXem (gộp lại có chừng 30byte) và có loại trừ IP trùng chỉ tính 1 lượt view, chẳng ăn thua gì với MySQL cả.

5 Likes

Thật à bác, Chắc là do mình chưa am hiểu quá sâu về mysql nên mình thường suy nghĩ theo khuynh hướng gà mờ.
Cảm ơn 2 bác đã giúp mình giải đáp thắc mắc này nhé

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?