Автор Тема: Не тот результат какой хочу  (Прочитано 6731 раз)

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

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Не тот результат какой хочу
« : 27 Декабря 2004, 22:58:23 »
У меня вот такой запрос

SELECT t . * , max( p.date ) AS last, p.author, count( * )
FROM we_topics t
INNER JOIN we_posts p ON t.tid = p.topic_id
WHERE t.forum_id = \'2\'
GROUP BY p.topic_id
ORDER BY last DESC

как вы поняли я пытаюсь вытащить последний пост в данной теме и показать его.
проблема в том что время поста нужное, то есть самое последнее, но при этом автор выдается почему-то первого поста.
В чем моя ошибка?

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Не тот результат какой хочу
« Ответ #1 : 28 Декабря 2004, 10:30:25 »
Rodent
покажи структуру таблиц...
And no religion too...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не тот результат какой хочу
« Ответ #2 : 28 Декабря 2004, 10:52:03 »
commander
ты с этим вопросом напоминаешь старого доктора из фильма "Не горюй". У того при любой болезни надо сдавать мочу. Ушибы, переломы - не важно. Сдавай.

И здесь тоже. Ну прочто никак невозможно обойтись без структуры, чтобы сообразить - при группировке кроме агрегатного поля остальные берутся от балды.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Не тот результат какой хочу
« Ответ #3 : 28 Декабря 2004, 11:02:15 »
RomikChef
Цитировать

ты с этим вопросом напоминаешь старого доктора из фильма "Не горюй". У того при любой болезни надо сдавать мочу. Ушибы, переломы - не важно. Сдавай.

:) шутки понял... :)

я даже сильно всматриваться в запрос не стал... поскольку строить догадки по поводу неработоспособности запроса не зная структуру таблиц, на мой взгляд утопично ....
And no religion too...

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Не тот результат какой хочу
« Ответ #4 : 28 Декабря 2004, 13:04:39 »
Извиняюсь, за столько скорый вопрос без уточнения данных.
Вот структура таблиц

--
-- Структура таблицы `we_topics`
--

CREATE TABLE `we_topics` (
  `forum_id` smallint(5) default NULL,
  `tid` int(10) NOT NULL auto_increment,
  `title` varchar(100) default NULL,
  `descr` varchar(100) default NULL,
  `state` tinyint(1) NOT NULL default \'0\',
  PRIMARY KEY  (`tid`),
  UNIQUE KEY `id_topic` (`tid`)
) TYPE=MyISAM AUTO_INCREMENT=92 ;

--
-- Структура таблицы `we_posts`
--

CREATE TABLE `we_posts` (
  `forum_id` smallint(5) NOT NULL default \'0\',
  `topic_id` int(10) NOT NULL default \'0\',
  `pid` int(10) NOT NULL auto_increment,
  `text` text,
  `author` varchar(30) default NULL,
  `date` varchar(12) default NULL,
  `ip` varchar(15) default NULL,
  `edit_name` varchar(30) default NULL,
  `edit_date` varchar(12) default NULL,
  PRIMARY KEY  (`pid`),
  UNIQUE KEY `id_post` (`pid`)
) TYPE=MyISAM AUTO_INCREMENT=221 ;

Что я пытаюсь сделать...
Это выдащить последний пост для каджого топика.
Что получается...
группируется все по темам, дата полседнего поста, при этом автор первого поста.

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Не тот результат какой хочу
« Ответ #5 : 28 Декабря 2004, 13:07:16 »
Цитировать
RomikChef:
при группировке кроме агрегатного поля остальные берутся от балды.

как это от балды? я ведь указал, что группировка по последней дате... я думал, что при этом и автор будет последнего поста, или тут что-то еще не указал...???

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не тот результат какой хочу
« Ответ #6 : 28 Декабря 2004, 14:38:03 »
Цитировать
Rodent:
я думал, что при этом и автор

извини, но мысли улавливать бд еще не научилась

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не тот результат какой хочу
« Ответ #7 : 28 Декабря 2004, 14:45:46 »
commander
думать надо головой.
а не структуру разглядывать.

Все ннужные данные о структуре таблиц вполне можно получить из запроса. Ну, это, впрочем, если способностей хватает.
А если нет - то только структура, да.
Ну, вот она, у тебя есть. Давай, вещай.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Не тот результат какой хочу
« Ответ #8 : 28 Декабря 2004, 15:06:53 »
Rodent
Может обратимся к простым решениям? :)
SELECT MAX(pid) FROM we_posts WHERE forum_id = \'2\'
идея понятна?

RomikChef
Цитировать
Ну, это, впрочем, если способностей хватает.

никто тут твоих способностей не принежает... успокойся... ;)
And no religion too...

Оффлайн Rodent

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 133
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.unimix.ru
Не тот результат какой хочу
« Ответ #9 : 28 Декабря 2004, 15:24:37 »
Наверное я все-таки не правильно выражаю свою мысль...
структура таблиц известна...
тем может быть много...
в каждой теме n-количество постов
в каждом количестве есть последний пост
свои запросом, я группирую посты по теме, и темы выдаю которые относятся к данному форуму (т.е. 2)
при этом так же хоелось чтобы выдавалось дата последнего сообщения (поста) и его автор...
Что происходит у меня, все группируется, дата последнего поста выдается, но при этом так же выдается автор первого поста в данной группировке...
Вот я и спрашиваю, как такое возможно... что дата береться последнего поста в данной группировке а автор первого поста..?
Если я что -то упустил в рассмотрении бд просьба объяснить...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не тот результат какой хочу
« Ответ #10 : 28 Декабря 2004, 16:03:47 »
Цитировать
commander:
никто тут твоих способностей не принежает...

хахаха
оказывается, это о моих способностях идет речь.
утешил :-)))))
Спасибо тебе, родной, ты меня растрогал.
Ну, от личных дел перейдем к общественным.
структура у тебя есть.
Без структуры было отвечать утопично.
Я жду твоих пояснений со структурой.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не тот результат какой хочу
« Ответ #11 : 28 Декабря 2004, 16:06:54 »
Цитировать
Rodent:
Если я что -то упустил в рассмотрении бд просьба объяснить...

Очевидно, что упустил в описании механизма group by.
А что именно - тебе commander объяснит.
Ведь механизм работы БД зависит от структуры таблиц.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Не тот результат какой хочу
« Ответ #12 : 28 Декабря 2004, 16:55:22 »
RomikChef
Цитировать
оказывается, это о моих способностях идет речь.
утешил :-)))))
Спасибо тебе, родной, ты меня растрогал.

всегда пожалуйста! :)

Цитировать
Очевидно, что упустил в описании механизма group by.

даже если не упускать это "что-то" в описании механизма group by решение всё равно не правильно родное сердце! ;)

В связи с этим структура таблиц нужна! :)
And no religion too...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не тот результат какой хочу
« Ответ #13 : 28 Декабря 2004, 17:14:04 »
так я не спорю. нужна-нужна.
вот она у тебя есть.
давай правильное решение.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Не тот результат какой хочу
« Ответ #14 : 28 Декабря 2004, 17:31:02 »
Rodent
SELECT DISTINCT t.*, (SELECT MAX(date) FROM we_posts WHERE topic_id=t.tid) AS date,
(SELECT author FROM we_posts WHERE topic_id=t.tid AND date=(SELECT MAX(date) FROM we_posts WHERE topic_id=t.tid)) AS author
FROM we_posts p, we_topics t WHERE t.tid=p.topic_id

идея понятна? или пояснить?
And no religion too...

 

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