我正在试图弄清楚如何查询我的数据库,以便它基本上首先对我的结果进行ORDER然后对它们进行GROUP ...这个问题似乎有点常见,我找到了例子,但我仍然不太掌握“如何”做到这一点并在我自己的情况下使用这些例子......所以所有的帮助都是绝对值得赞赏的。
以下是我的MySQL表格:
书
book_id
BOOK_TITLE
用户
USER_ID
USER_NAME
book_reviews
REVIEW_ID
book_id
USER_ID
review_date(unix时间戳日期)
我想查询30条最新的书评。它们只会显示为:
书名
审稿人的用户名
但是我想每本书不超过一次。因此,列表中显示的评论应该是最近添加的评论。为此,我只是按book_name分组并通过review_date DESC进行排序。但是以这种方式查询并不会显示最近添加的review_date作为按行分组的记录,因此我的数据不正确。
这是我当前的查询:
SELECT books.books_title, users.user_name, book_reviews.review_id FROM books, users, book_reviews WHERE book_reviews.book_id = books.book_id AND book_reviews.user_id = users.user_id GROUP BY book_title ORDER BY review_date DESC LIMIT 30
从我读过的内容看来,似乎我必须有一个子查询,我得到MAX(review_date)值,但我仍然不明白如何将它全部链接起来。
非常感谢。
答案 0 :(得分:2)
使用:
SELECT x.book_title,
x.user_name
FROM (SELECT b.book_title,
u.user_name,
br.review_date,
CASE
WHEN @book = b.book_title THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rank,
@book := b.book_title
FROM BOOKS b
JOIN BOOK_REVIEWS br ON br.book_id = b.book_id
JOIN USERS u ON u.user_id = br.user_id
JOIN (SELECT @rownum := 0, @book := '') r
ORDER BY b.book_title, br.review_date DESC) x
WHERE x.rank = 1
ORDER BY x.review_date DESC
LIMIT 30
MySQL没有分析/排名/窗口功能,但是这会对最新标记为1的评论进行排名。这是基于每本书......
我将审核日期暴露给最新的每本书的最新订单......