В настоящее время я изо всех сил стараюсь найти правильный запрос о том, чего хочу достичь, и задавался вопросом, есть ли у кого-то яркие идеи. Был утерян здесь уже довольно несколько дней и просто не может найти правильный запрос, чтобы получить то, что мне нужно.MySQL запрос сортировка правильной информации
Желаемый результат:
В настоящее время я полностью работает форум, с несколькими категориями, в связи с тем, что есть несколько категорий, которые я хотел бы сделать страницу обзор в основном о том, последнюю нить, последнее сообщение, по кого и в какое время за категорию.
Вот как моя таблица построена
Имя: Форумы Поля: ID, имя
Имя: forum_threads Поля: идентификатор, F_ID, при условии, автор, lastpost
Имя: forum_posts Поля: идентификатор, t_id, должность, автор, время
Реальная проблема
Я получил запрос до сих пор, что он отображает все, как я хочу, за исключением одного вещь, она не получает последнюю тему темы, все остальное, кажется, отображается правильно (обратите внимание, что я отключил forums.id 9 и все выше 12, я не хочу показывать эти результаты.
SELECT forums.id, t.id AS thread_id,
t.subject,
t.forum_id,
t.author, t.lastpost,
u1.name AS author_name, u1.avatar AS author_avatar,
u2.name AS lastpost_name, u.avatar AS lastpost_avatar
COUNT(p.id) AS postscount, COUNT(DISTINCT (t.id)) AS threadscount,
forums.name,
max(p.time) last_post_date
FROM forum_threads t
INNER JOIN users u1 ON u1.id = t.author
INNER JOIN users u2 ON u2.id = t.lastpost
INNER JOIN forum_posts p ON p.t_id = t.id
INNER JOIN forums ON forums.id = t.forum_id
WHERE forums.id != 9 AND forums.id > 12
GROUP BY forums.id
ORDER BY forums.id ASC, p.id DESC, last_post_date DESC
У кого-нибудь есть идеи?
Ну, thread_id ссылается на тот же поток, что и на тему, только что это не последняя ветка, в которую были отправлены. Цените входные данные в ситуации вне темы, я разрешу это, как только все будет готово , это означает, что некоторые форумы не будут показаны пользователям, которые не вошли в систему. – user2949138
У вас есть несколько вариантов: вы можете фильтровать на стороне приложения, чтобы вы выбрали поток с максимальным значением last_post_date из всего набора результатов (который может стать дорогим, поскольку ваш сайт становится более занятым). Вы также можете добавить подзапрос, который в mysql будет довольно плохим для производительности. Вы также можете выполнить второй запрос на уровне приложения и передать список идентификаторов в слое приложения. Я добавлю пример подзапроса в ответ. – syrion
Спасибо! после игры с тем, что вы опубликовали, мне удалось исправить точный результат, который я хотел, и мне также пришлось сделать отдельное внутреннее соединение для моих целей, но теперь все работает хорошо! Дал бы вам куддо, но для этого нужно больше репутации, поэтому, если кто-то может сделать это от моего имени, пожалуйста, сделайте это для этой легенды =) – user2949138