Проблема с сортировкой комментариев в порядке дат - PullRequest
0 голосов
/ 21 сентября 2011

Я новичок в MySQL, и у меня проблема с сортировкой двух таблиц.

Этот SQL предназначен для сортировки новейших комментариев к книгам, но я сортирую эти книги по первым комментариям, а не по последним.

SELECT b.*, c.date_added as date FROM books b
        LEFT JOIN comments c ON (b.id = c.book_id)
        GROUP BY b.id
        ORDER BY date DESC 
        LIMIT 5

CREATE TABLE IF NOT EXISTS `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `caption` varchar(255) COLLATE utf8_bin NOT NULL,
  `author` varchar(255) COLLATE utf8_bin NOT NULL,
  `pages` int(11) NOT NULL,
  `category_id` int(11) NOT NULL,
  `filename` varchar(255) COLLATE utf8_bin NOT NULL,
  `description` text COLLATE utf8_bin NOT NULL,
  `date_added` datetime NOT NULL,
  `publisher` varchar(255) COLLATE utf8_bin NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `times_sold` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `book_id` int(11) NOT NULL,
  `author` varchar(255) COLLATE utf8_bin NOT NULL,
  `email` varchar(255) COLLATE utf8_bin NOT NULL,
  `body` text COLLATE utf8_bin NOT NULL,
  `date_added` datetime NOT NULL,
  `approved` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Спасибо, что уделили время.

Ответы [ 3 ]

2 голосов
/ 21 сентября 2011

Это должно сработать.Вы указываете группу на b.id, но поскольку у вас есть несколько комментариев для каждой книги, вам нужна агрегатная функция на c.date_added.В этом случае вы можете использовать MAX для отображения самой последней даты комментария.

    SELECT b.*, MAX(c.date_added) as date FROM books b
    LEFT JOIN comments c ON (b.id = c.book_id)
    GROUP BY b.id
    ORDER BY MAX(c.date_added) DESC 
    LIMIT 5
0 голосов
/ 21 сентября 2011

Нет поля с именем date, вам нужно упорядочить его по date_added (ORDER BY date_added DESC), как это есть в вашей таблице!Если это все еще не в правильном порядке, просто используйте ASC вместо DESC.

0 голосов
/ 21 сентября 2011

Предложение «Группировать по» неверно, и его необходимо удалить.

«Группировать по» используется для агрегатных функций, таких как Min () и Max ().

TryЭто

SELECT b.*, c.date_added FROM books b
        JOIN comments c ON  
          c.book_id = b.id
        ORDER BY c.date_added DESC 
        LIMIT 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...