2010-02-06 2 views
0

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

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

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

+1

Посмотрите, как вы используете пользовательский объект базы данных, и кто знает, как этот объект пользовательских баз данных вы используете работу ! Не видя исходный код для этого, мы не можем с уверенностью сказать вам, как изменить массив, который вы передаете функции build_query, чтобы он выдавал действительный запрос MySQL. Вы получите ответы о том, как изменить запрос, но если вы не знаете, как изменить объект, чтобы получить новый запрос, вы, вероятно, не получите здесь хорошего ответа. –

+0

Я использую приложение форума php с открытым исходным кодом PunBB. Я потерял и смутил ( –

ответ

1

Если вы хотите только одно значение для каждой темы, вы можете группировать по теме, и из каждой темы выберите самую последнюю запись. Затем вы можете выбрать 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

изменение этой линии

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

в

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

, похоже, не работает. 0 mysql поддерживает это? –

+2

MySQL должен его поддерживать, но это не сработает, потому что 'p.id' всегда будет отличаться для каждого сообщения. –

3

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

WHERE p.id = (
    SELECT pp.id 
    FROM posts AS pp 
    WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1 
) 
+0

Я не очень хорошо разбираюсь в sql, поэтому я немного смущен, когда это утверждение «где», пожалуйста, дайте мне полное заявление sql? –

+0

Он идет между JOINS и ORDER BY следующим образом: '' WHERE '=>' p .id = (...) ', ' – Leventix

+0

К сожалению, я не знаю, как эта библиотека php создает инструкции sql, поэтому выше не работало. Я использую приложение для форума PunBB. –

Смежные вопросы