Получить последнее сообщение в каждой категории - Форум

Я создаю форум, и у меня возникли проблемы.

Основная структура базы данных выглядит так:

users
| user_id | username

categories
| category_id | category_name |

forum_posts
| post_id | ref_post_id (FK) | ref_category_id (FK) | ref_user_id (FK) | post_date |

Если ref_post_id равно 0, это означает, что это главный пост потока, который имеет заголовок. Для ответов на поток ref_post_id равен сообщению post_id главной записи. Надеюсь, вы понимаете.

Как я могу получить последнее сообщение в каждой категории? Включая заголовок темы сообщений и имя пользователя из таблицы пользователей. Должен ли я изменить структуру таблицы и добавить поле «latest_post_id» в таблицу категорий или что-то еще?

Очень полезно для вашей помощи. Я знаю, что есть похожие вопросы, но мне также интересно, должен ли я хранить last_post_id и все это в таблице категорий или иметь огромный запрос для извлечения всего на каждую загрузку страницы.

РЕДАКТИРОВАТЬ 2: ЗДЕСЬ МОЙ ТЕКУЩИЙ ЗАПРОС:

SELECT category_id, name, 
(SELECT COUNT(*) FROM forum_posts WHERE ref_category_id = category_id AND ref_post_id = 0) count_threads
(
SELECT title, ref_user_id, username FROM forum_posts
LEFT JOIN users ON user_id =     ref_user_id
WHERE latest_post_id = (SELECT MAX(latest_post_id) FROM forum_posts WHERE    ref_category_id = category_id LIMIT 1)
)
FROM forum_categories
0
nl ja de
Если это будет отображаться при каждой загрузке списка форумов, вероятно, имеет смысл хранить кэшированный most_recent_post_id или что-то подобное в таблице форума. Обновите это, создавая новое редактирование/редактирование/любую другую логику. Затем, показывая последнее сообщение, так же просто, как JOIN , в отличие от нескольких запросов или подзапроса.
добавлено автор Colin M, источник
Какие РСУБД вы используете?
добавлено автор sgeddes, источник

1 ответы

если у вас есть дата создания, вам нужно получить номер с датой MAX, если вы этого не сделаете, вы можете использовать MAX (post_id), но если вы позволите пользователю ИЗМЕНИТЬ свою почту, и вы хотите получить последнюю созданную или отредактированную вы должны добавить дату изменения в базу данных.

получить последнее сообщение:

SELECT * FROM forum_posts p 
INNER JOIN users u ON p.ref_user_id=u.user_id
WHERE `post_id`=(SELECT max(`post_id`) FROM forum_posts WHERE ref_category_id=$value);

If you are using a date, just use that field instead of post_id

0
добавлено
Как я могу получить имя пользователя? И титул? Я обновил свой вопрос с помощью текущего запроса, который не получает последнюю запись.
добавлено автор lawls, источник
Проблема в том, что я могу получить только одно поле в моем подзапросе. Посмотрите мой новый обновленный вопрос, где я выбираю заголовок и другие вещи в подзапросе. Это не работает, так как я могу получить только одно поле. Надеюсь ты понимаешь.
добавлено автор lawls, источник
мой запрос будет извлекать все в таблице forum_posts, если вы хотите использовать FK для получения нормальных значений, вы должны использовать JOIN. Я обновлю свой пример
добавлено автор Naryl, источник
с этим JOIN вы также получите информацию о пользователе, надейтесь, что это поможет
добавлено автор Naryl, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp