2013-07-04 2 views
-3

Я хранящей темы для форума с соотношением родителя/ребенка следующим образом:Как выбрать и сортировать данные с родителем/ребенком отношения

CREATE TABLE forum_threads (
    thread_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
    parent_id INTEGER UNSIGNED NOT NULL DEFAULT 0, 
    topic_id INTEGER UNSIGNED NOT NULL, 
    user_id INTEGER UNSIGNED NOT NULL, 
    title VARCHAR(100) NOT NULL, 
    body TEXT NOT NULL, 
    create_date DATETIME NOT NULL, 

    PRIMARY KEY (thread_id), 
    FOREIGN KEY (parent_id) 
    REFERENCES forum_threads(thread_id), 
    FOREIGN KEY (topic_id) 
    REFERENCES forum_topics(topic_id), 
    FOREIGN KEY (user_id) 
    REFERENCES users(user_id) 
); 

Новые темы имеют parent_id = 0, а ответы есть parent_id = the thread_id being replied to.

Я хочу, чтобы выбрать наиболее недавно обновлен (ответил на) темы и отображать результаты в таблице следующим образом:

enter image description here

Как я могу это сделать?

SELECT * FROM forum_threads 
WHERE topic_id = whatever AND parent_id = 0 
WHAT NEXT??? 

Я не уверен, если это может быть сделано с чистым SQL, или если я должен манипулировать результаты с PHP, или, если я должен попробовать другой подход все вместе?

+0

Эта ссылка поможет вам за то же самое: http://stackoverflow.com/questions/15049133/mysql-select-only-newest-message-from- distinct-threads-order-by-timestamp-priva –

ответ

0

Используйте приведенный ниже запрос:

SELECT * FROM forum_threads 
    WHERE topic_id = whatever AND parent_id = 0 
    ORDER BY updated_date DESC limit 1; 

это даст вам наиболее запись обновления.

+0

где вы получаете 'updated_date' ?? –

+0

@mistermartin, откуда вы показываете его в result.it будет в вашем db. это просто освобождение от мин. если вы создали дату, то вы можете отсортировать это поле. это имя поля таблицы. –

+0

'updated_date' не в моей таблице. Я не хочу просто заказывать 'create_date'. Пожалуйста, перечитайте вопрос. –

0

Вы можете просто сделать это в SQl

SELECT ft.* FROM forum_threads AS ft 
JOIN forum_threads AS ft1 ON ft.id = ft1.thread_id 
WHERE topic_id = whatever AND parent_id = 0 
ORDER BY ft.create_date DESC 
LIMIT 1 
+0

этот запрос не работает. –

+0

Можете ли вы заглянуть в нее сейчас. ft.thread_id изменено на ft1.thread_id –