Автор Тема: Первая страница форума  (Прочитано 2656 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Первая страница форума
« : 31 Марта 2004, 02:22:02 »
На самом деле, форум я не пишу, но задача схожая.
Есть набор категорий (около 30 штук).
В каждой категории создаются темы.
Нужно вывести список категорий, в котором, помимо всего прочего, должна быть ссылка на последнюю тему.
Хотел сделать всё сам - куда там! Второй день мучаюсь, ищу по форумам, курю доки и копаю чужые сорцы... Хотел вытащить этот кусок из вбуллетня, но его разработчики поступили хитрее - они хранят название и айди последней темы прямо в таблице форумов.
Вот структура моих таблиц (упростил под данный вопрос):
CREATE TABLE `categories` (
    `category_id`smallint(6) unsigned NOT NULL auto_increment,
    `title` varchar(100) NOT NULL default \'\',
    PRIMARY KEY (`category_id`),
);

CREATE TABLE `topics` (
    `topic_id` smallint(6) unsigned NOT NULL auto_increment,
    `category_id` smallint(6) unsigned NOT NULL default \'0\',
    `title` varchar(100) NOT NULL default \'\',
    `timestamp` bigint(20) NOT NULL default \'0\',
    PRIMARY KEY (`topic_id`),
);

Я не буду перечислять все запросы, котороые я перепробовал за эту пару дней. Покажу только последний:
SELECT c.category_id, c.title, t.topic_id, t.title
FROM categories AS c
LEFT JOIN yn_topics AS t ON (c.category_id = t.category_id)
GROUP BY t.topic_id (пробовал и t.category_id)

Запрос возвращает либо все категории, но топики не последние, а первые; либо возвращает все категории (по нескольку раз каждую) + все топики в порядке возрастания таймстемпа. Ещё игрался с ORDER BY t.timestamp DESC (в оригинале у меня стоит ORDER BY c.left, потому что категории лежат в виде nested sets), но оно тоже не дало нужный результат.
Кажется мне, что тут пригодилась бы та директива, о которой я до сих пор не имею ни малейшего представление - HAVING.
Признаться честно, мануал по мускулю для меня до сих пор остается темным лесом - имхо, читать его очень неудобно. Если ответ на мой вопрос есть в нём, ткните, пожалуйста, в конкретное место.
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Первая страница форума
« Ответ #1 : 31 Марта 2004, 13:04:39 »
версия mysql какая ?
вложенные запросы поддерживаются ?
Если да, то что-то похожее SELECT topic_id, title FROM topics WHERE topic_id IN
(SELECT MAX(topic_id) FROM topics GROUP BY category_id)

надо к твоему запросу прикрепить
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
Первая страница форума
« Ответ #2 : 01 Апреля 2004, 01:41:54 »
Спасибо, эта идея мне отлично подошла!
Версия мускуля четвёртая, но для обратной совместимости решил всё же разбить запрос на два.
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28