Я пытаюсь выяснить, как запросить мою базу данных, чтобы она по существу сначала ЗАПИСАла мои результаты, а затем GROUP их ... Этот вопрос кажется, немного распространены, и я нашел примеры, но я до сих пор не совсем понимаю «как» сделать это и использовать примеры в моей собственной ситуации ... Итак, вся помощь, безусловно, ценится.Получение группы MySQL по запросу для отображения строки в этой группе с наивысшим значением
Вот моя 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), но я до сих пор не понимаю, как соедините все это.
Спасибо тонну.
Спасибо за ответ OMG Ponies! Я до сих пор довольно неопытен с MySQL и никогда не занимался пользовательскими переменными или условиями CASE, поэтому я должен уметь учиться на этом ... Это говорит, что я получил ошибку, пытающуюся запустить это: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с «@book: = b.book_title FROM BOOKS b JOIN BOOK_REVIEWS b» в строке 10 – flight643
@ flight643: Извините, у него не было запятой после «AS rank ». Выражения CASE почти идентичны выражениям SWITCH, если вы знакомы с ними. –