SQL - как извлечь темы форума, которые не повторяются? - PullRequest
0 голосов
/ 06 февраля 2010

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

http://punbb.informer.com/wiki/punbb13/integration#recent_10_posts

В основном показывают последние сообщения, но только один раз для каждой темы / темы форума.

Ответы [ 3 ]

3 голосов
/ 06 февраля 2010

Добавить условие для сохранения только записей, где сообщение является последним сообщением в теме:

WHERE p.id = (
  SELECT pp.id 
  FROM posts AS pp
  WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1
)
1 голос
/ 06 февраля 2010

Если вам нужно только одно значение для каждой темы, вы можете сгруппировать их по темам, и из каждой темы выбрать самый последний пост. Затем вы можете выбрать 10 лучших тем.

Я напишу это на SQL, и вы можете перевести это на PHP:

SELECT p.id, p.message, o.subject
FROM
((SELECT t.id
  FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id
  GROUP BY t.id
  HAVING p.posted = MAX(p.posted) ) ids LEFT JOIN topics AS t ON ids.id = t.id) o
                                        LEFT JOIN posts AS p ON o.id = posts.topic_id
ORDER BY p.posted DESC
LIMIT '0,10'
1 голос
/ 06 февраля 2010

изменить эту строку

'SELECT'    => 'p.id, p.message, t.subject',

до

'SELECT DISTINCT'   => 'p.id, p.message, t.subject',
...