PHP MYSQL Форум тизер, как?
Мне нравится делать тизер форума для моего сайта. Легко просто показывать последние сообщения или темы. Мне нравится получать последние темы и сообщения в одном запросе, упорядоченные по последним действиям. Таким образом, он будет упорядочен по дате REPLY TO POST и дате THREAD POST в том же запросе. Я думаю, что это имеет какое-то отношение к тому, как вы это делаете, но я не уверен.
таблицы
потоки
id, header, text, date, author
сообщений
id, text, date, author, thread_id
Пример использования
20 минут назад - Как сделать скрипт php/mysql (2)
17 минут назад - пожалуйста, помогите мне здесь (0)
1 час назад - мне нужна помощь с PHP (1)
Как видите, в списке есть как отвеченные, так и новые темы. (Мне нужна дата последнего ответа или когда он был создан, заголовок и количество () ответов)
Я надеюсь, что вы получите, и знаете, как это сделать.
Troels
ОБНОВИТЬ:
У меня есть это, и это нормально, но я получаю только темы с ответами.
SELECT
threads.*,
posts.*,
(SELECT date FROM posts WHERE thread_id = threads.id ORDER BY date DESC LIMIT 0,1) AS postdate,
(SELECT count(id) FROM threads WHERE thread_id = thread.id) AS replys
FROM
threads,
posts
WHERE
threads.id = posts.thread_id
GROUP BY
thread_id
ORDER BY
postdate DESC,
thread.date
LIMIT
0,15
КАК Я МОГУ ЭТО СДЕЛАТЬ?
ОБНОВИТЬ
ааааааааааааааааааааааааааааа!!!!
Мне удалось сделать это самому:-) Потребовалось время, чтобы сделать это правильно.
SELECT
fisk_debat.id,
fisk_debat.dato,
IF((SELECT count(id) FROM fisk_debat_svar WHERE debatid = fisk_debat.id) < 1, fisk_debat.dato, (SELECT dato FROM fisk_debat_svar WHERE debatid = fisk_debat.id ORDER BY dato DESC LIMIT 0,1)) AS svardato,
fisk_debat.overskrift,
(
SELECT count(fisk_debat_svar.debatid)
FROM fisk_debat_svar
WHERE fisk_debat_svar.debatid = fisk_debat.id
) AS svar
FROM fisk_debat
GROUP BY id
UNION
SELECT
fisk_debat_svar.debatid AS id,
max(fisk_debat_svar.dato) AS dato,
max(fisk_debat_svar.dato) AS svardato,
(
SELECT fisk_debat.overskrift
FROM fisk_debat
WHERE fisk_debat.id = fisk_debat_svar.debatid
) AS overskrift,
(
SELECT count(fisk_debat_svar.debatid)
FROM fisk_debat_svar
WHERE fisk_debat_svar.debatid = id
) AS svar
FROM fisk_debat_svar
WHERE id != id
GROUP BY id
ORDER BY svardato DESC, dato DESC
LIMIT 0,15
2 ответа
Если вы хотите сохранить текущую структуру БД, вам понадобится объединение, чтобы получить желаемый результат. Пример можно найти по адресу http://www.mysqltutorial.org/sql-union-mysql.aspx
Тем не менее, я бы посоветовал изменить структуру, как описано в комментариях к вашему вопросу.
WHERE
пункты только выбирают темы с ответами, что нормально. Вы должны использовать LEFT JOIN
синтаксис.
Попробуй это:
SELECT
threads.*,
posts.*,
(SELECT date FROM posts WHERE thread_id = threads.id ORDER BY date DESC LIMIT 0,1) AS postdate,
(SELECT count(id) FROM threads WHERE thread_id = thread.id) AS replys
FROM
threads
LEFT JOIN
posts
ON
threads.id = posts.thread_id
ORDER BY
postdate DESC,
thread.date
LIMIT
0,15