Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MYSQL论坛攻略,如何?_Php_Mysql_Forum_Teaser - Fatal编程技术网

PHP MYSQL论坛攻略,如何?

PHP MYSQL论坛攻略,如何?,php,mysql,forum,teaser,Php,Mysql,Forum,Teaser,我喜欢为我的网站制作一个论坛摘要。只显示最新的帖子或帖子很容易。。我喜欢在同一个查询中获取最新的线程和帖子,按最后一个活动排序。因此,它将通过回复POST date进行排序,并在同一查询中执行POST date。我认为这与你如何分组有关,但我不确定 桌子 线程 职位 用法示例 20分钟前-如何制作php/mysql脚本2 17分钟前-请在这里帮助我0 1小时前-我需要PHP1的帮助 如您所见,已应答线程和新线程都在列表中。我需要一个最新回复的日期或创建日期、标题和回复数量 我希望你得到,并且知道

我喜欢为我的网站制作一个论坛摘要。只显示最新的帖子或帖子很容易。。我喜欢在同一个查询中获取最新的线程和帖子,按最后一个活动排序。因此,它将通过回复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