PHP MYSQL论坛攻略,如何?
我喜欢为我的网站制作一个论坛摘要。只显示最新的帖子或帖子很容易。。我喜欢在同一个查询中获取最新的线程和帖子,按最后一个活动排序。因此,它将通过回复POST date进行排序,并在同一查询中执行POST date。我认为这与你如何分组有关,但我不确定 桌子 线程 职位 用法示例 20分钟前-如何制作php/mysql脚本2 17分钟前-请在这里帮助我0 1小时前-我需要PHP1的帮助 如您所见,已应答线程和新线程都在列表中。我需要一个最新回复的日期或创建日期、标题和回复数量 我希望你得到,并且知道如何做到这一点 特罗尔斯 更新: 我有这个,这没关系,但我只得到回复线程PHP MYSQL论坛攻略,如何?,php,mysql,forum,teaser,Php,Mysql,Forum,Teaser,我喜欢为我的网站制作一个论坛摘要。只显示最新的帖子或帖子很容易。。我喜欢在同一个查询中获取最新的线程和帖子,按最后一个活动排序。因此,它将通过回复POST date进行排序,并在同一查询中执行POST date。我认为这与你如何分组有关,但我不确定 桌子 线程 职位 用法示例 20分钟前-如何制作php/mysql脚本2 17分钟前-请在这里帮助我0 1小时前-我需要PHP1的帮助 如您所见,已应答线程和新线程都在列表中。我需要一个最新回复的日期或创建日期、标题和回复数量 我希望你得到,并且知道
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
我该怎么做
更新
aaaaaaaaaaaaaawwwwww耶
我自己设法做到了:-花了一段时间才把它做好
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
如果希望保持当前的DB结构,则需要一个并集来获得所需的结果。 一个例子可以在 但是,我仍然建议更改问题注释中解释的结构。WHERE子句仅选择有回复的线程,这是正常的。您必须使用左连接语法 试试这个:
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
你自己开发过论坛软件吗?DB结构看起来有缺陷,线程中的“原始帖子”也应该在posts表中。这也会让你的查询更容易。是的,我自己开发的。原始帖子应该在那里。如果不检查你的整个查询,你在第四行有一个打字错误。SELECT dato应为SELECT DATE,只是有点遗漏。:-我让你们的名字变得简单了。它不是原始的表、行名称。它似乎不起作用。我也需要原始线程的日期。如果他们没有任何答复。
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
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