PHP MYSQL 论坛预告片,如何


PHP MYSQL Forum teaser, howto?

我喜欢为我的网站制作论坛预告片。它很容易只显示最新的帖子或线程。我喜欢在同一查询中获取最新的线程和帖子,按最后一个活动排序。因此,它将在同一查询中按回复发布日期和线程发布日期排序。我认为这与你如何分组它有一些想法,但我不确定。

线程

id, header, text, date, author

职位

id, text, date, author, thread_id

使用示例

20分钟前 - 如何制作一个php/mysql脚本 (2)

17分钟前 - 请在这里帮助我 (0)

1 小时前 - 我需要 PHP 方面的帮助 (1)

如您所见,已回答的线程和新线程都在列表中。(我需要最新回复的日期或创建时间、标题和回复的计数()

我希望你得到,并且知道如何做到这一点。

特罗尔斯

更新:

我有这个,没关系,但我只收到带有回复的线程。

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

如果要保留当前的数据库结构,则需要联合才能获得所需的结果。可以在 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