Cách sắp xếp bài viết mới nhất trong SQL
Chào các anh chị, em đang tìm hiểu và làm thử cách sắp xếp bài viết ở trong 1 forum, theo em thấy nó sẽ như thế này: sắp xếp bài viết theo thứ tự comment gần nhất hoặc post mới nhất, em có 2 bảng SQL sau:
Bảng posts
và post_comments

Trong đó column post_id
là primary key trỏ về id
của table posts
ạ.
Em đã thử leftJoin table posts
với post_comment
, sau đó orderBy posts.created_at
, orderBy tiếp post_comments.created_at
, rồi select('posts.*')
để lấy mỗi giá trị của table posts
thôi, nhưng nó cứ lỗi hoài ạ :’( , có nhiều comment trong một post thì nó tự nhân post đó lên luôn hic , rồi sắp xếp bậy bạ nữa :’( , có anh chị nào đã từng làm forum hay đại loại giống thế này thì có thể chỉ cho em được không ạ, em cám ơn
Sắp xếp những post mới nhất thì không cần phải query gì đến bảng comment. Chỉ cần:
select title, content, user_id, views from post order by id desc limit 10
Còn nếu muốn sắp xếp post dựa trên “nếu có comment gần nhất thì xếp lên trên”. Thì lúc này chỉ cần ta lấy được:
SELECT * FROM post WHERE post_id IN (SELECT post_id FROM comment ORDER BY id DESC)
Mẹo, nếu lồng các câu lệnh SQL với nhau quá rối rắm mà chưa đủ sức để hiểu được thấu đáo thì tốt hơn hết là dùng table trung gian, query từng đoạn một ra đó rồi từ đó lại query tiếp.
Cảm ơn anh ạ, nhưng với query của anh thì có mỗt điều xảy ra đó là: nếu như nhiều comment trong 1 post thì nó lại lấy comment đầu tiên ạ :’(
Bạn cần đọc thêm về SQL rồi viết các câu lệnh rồi điều chỉnh. Nó không quá khó đâu, một dạng làm bài tập về nhà, phải cố gắng suy nghĩ lên một chút sau khi nắm vững lý thuyết.
Việc “nếu có nhiều comment trong 1 post thì nó lại lấy comment đầu tiên” <= trong khi câu hỏi trước là bạn lấy post chứ đâu có lấy comment?
Gợi ý: muốn lấy comment cuối cùng thì bạn phải định nghĩa “thế nào là comment cuối cùng”? Có phải nó là comment có id lớn nhất hay không? Hay là created_at hoặc updated_at lớn/ gần nhất… Tự trả lời rồi viết câu lệnh SQL dựa trên các dữ kiện/ điều kiện như vậy.
Done.