Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中对来自数据库(JOIN?)的结果进行排序_Php_Sorting_Left Join - Fatal编程技术网

帮助在php中对来自数据库(JOIN?)的结果进行排序

帮助在php中对来自数据库(JOIN?)的结果进行排序,php,sorting,left-join,Php,Sorting,Left Join,我升级了一点我的论坛,想改变主题的列表方式 我的主题存储在此表中: CREATE TABLE `forum_emner` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `type_forum` CHAR(9) NOT NULL, `gjengid` INT(10) UNSIGNED NULL DEFAULT '0', `sticky` TINYINT(1) UNSIGNED NULL DEFAULT '0',

我升级了一点我的论坛,想改变主题的列表方式

我的主题存储在此表中:

CREATE TABLE `forum_emner` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `type_forum` CHAR(9) NOT NULL,
    `gjengid` INT(10) UNSIGNED NULL DEFAULT '0',
    `sticky` TINYINT(1) UNSIGNED NULL DEFAULT '0',
    `emne` VARCHAR(255) NOT NULL,
    `innlegg` TEXT NOT NULL,
    `brukerid_starter` MEDIUMINT(8) UNSIGNED NOT NULL,
    `startet_dato` INT(10) UNSIGNED NOT NULL,
    `antall_lest` INT(10) UNSIGNED NULL DEFAULT '0',
    `antall_svar` INT(10) UNSIGNED NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    INDEX `type_forum` (`type_forum`),
    INDEX `gjengid` (`gjengid`),
    INDEX `sticky` (`sticky`),
    INDEX `brukerid_starter` (`brukerid_starter`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
主题的答案存储在forum\u emner表中的此表emneid equals id中:

CREATE TABLE `forum_svar` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `emneid` INT(10) UNSIGNED NOT NULL,
    `brukerid_av` MEDIUMINT(8) UNSIGNED NOT NULL,
    `innlegg` TEXT NOT NULL,
    `dato` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `emneid` (`emneid`),
    INDEX `brukerid_av` (`brukerid_av`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
dato是用php发布答案的时间

我想要的是:我想在论坛的dato_svar中对字段后的主题进行排序。最新答案的主题位于顶部,依此类推。但是,如果一个主题是在最热门的主题最后一个答案之后创建的,那么这个主题应该位于论坛实际运作方式的顶部

我自己也试过了,但效果不理想

SELECT *, `forum_emner`.id AS UnikTradID FROM `forum_emner` 
LEFT JOIN `forum_svar` ON (`forum_emner`.id = `forum_svar`.emneid) 
WHERE `forum_emner`.type_forum = :type AND `forum_emner`.sticky = 0 
ORDER BY `forum_svar`.dato DESC LIMIT :p1, :p2

有什么帮助吗

旁注:您应该像我下面一样使用,以使查询看起来更可读。 您不应该将MySQL字段名保存在英语以外的其他语言中。如果你雇用一个不会说你的语言的人怎么办

首先要做的是获取最新的线程ID。 我们可以通过这样的查询来实现这一点:

SELECT MAX(fs.id) AS LastThreadId FROM forum_svar AS fs GROUP BY fs.emneid ORDER BY LastThreadId
现在我们需要将这个结果集与线程连接起来,以获得完整的线程信息。 我们这样做,将第一个查询作为子查询放在这里:

SELECT fs.* FROM forum_svar AS fs LEFT JOIN (SELECT MAX(fs.id) AS LastThreadId FROM forum_svar AS fs GROUP BY fs.emneid ORDER BY LastThreadId DESC) n ON (n.LastThreadId = fs.id) WHERE n.LastThreadId IS NOT NULL
这将为您提供最新的线程。享受吧
另外,如果答案可行,别忘了接受

我建议您不要将时间戳作为数字存储在mysql数据库中。用它代替。不,它不是。如果主题有任何答案,它会打印很多次如果一个主题有一个答案,它会在主题列表上打印主题2次,没有答案的主题只打印一次,但在底部..现在呢?尝试我在这里的查询,我编辑了它。哦,你不应该使用*而应该指定你需要的字段作为回报,而不是所有的字段。谢谢!它现在几乎可以工作了。但它只是从每个主题的第一个答案中对主题进行排序。它应该在主题的最后一个答案之后简短。你能帮忙吗它不起作用:P只是将最后一个活动列添加到主题表中,然后对其进行排序。无论如何,谢谢你的帮助!:到底是什么不起作用?我可能会键入错误,因为我必须重写查询以适应您的表结构。。