-1

我需要先按日期订购我的查询...

所以我用了这个:

SELECT * FROM `mfw_navnode` order by `id` DESC

我想将我的结果从最后到第一个排序。

然后我想做的事

是在它上面添加一个查询,它将按 node_name 对我的结果进行分组。

结果应该是..所有按“类别/节点名称类型”分组的顶级节点,而我看到的第一个节点在第一个查询中对其类别的排序最高..

我想做这样的事情:

SELECT * FROM( 
SELECT * FROM `mfw_navnode` order by `id` DESC) AS DD
WHERE (node_name='Eby' OR node_name='Laa'  OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn' )
GROUP BY DD.node_name

当我输入该结果时,我没有得到任何结果..或来自 phpmyadmin 的任何响应..

我哪里错了?

请注意,我不想对我的结果进行分组然后对它们进行排序..

我希望它们被订购,然后分组。分组后..我希望每个组的结果具有最高值..来自组中的其他行

4

5 回答 5

1

首先执行排序是不够的,因为即使这样 MySQL 也不保证它将为每个组选择哪个记录。从手册

服务器可以从每个组中自由选择任何值,因此除非它们相同,否则选择的值是不确定的。

您必须改为使用子查询识别感兴趣的记录,然后再次将结果与您的表连接以获得相关值:

SELECT *
FROM   mfw_navnode NATURAL JOIN (
         SELECT node_name, MAX(id) AS id FROM mfw_navnode GROUP BY node_name
       ) AS DD
WHERE  node_name IN ('Eby', 'Laa', 'MIF', 'Amaur', 'Asn')
于 2012-05-16T15:11:04.143 回答
0

按 ID 排序,按 node_name 分组

SELECT * FROM `mfw_navnode`
WHERE (node_name='Eby' OR node_name='Laa'  OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn' )
GROUP BY DD.node_name
ORDER BY `id` DESC
于 2012-05-16T15:08:50.633 回答
0

当您使用某些聚合函数(sum、max、min、count 等)时,通常会使用分组。如果您在查询中不使用此类功能,那么您为什么要对结果进行分组?

无论如何,这应该可以解决问题:

SELECT *
FROM mfw_navnode
WHERE id IN (SELECT id
    FROM mfw_navnode
    WHERE node_name IN ('Eby', 'Laa', 'MIF', 'Amaur', 'Asn')
    GROUP BY node_name)
ORDER BY id
于 2012-05-16T15:09:47.953 回答
-1

以下 SQL 可能会为您提供所需的输出:

SELECT node_name, MAX(id)
FROM mfw_navnode
GROUP BY node_name
ORDER BY node_name
于 2012-05-16T15:06:11.637 回答
-1

我发现您的 SQL 存在两个问题。

1)在内联选择中下订单没有任何作用(并且可能导致错误)2)您正在对 node_name 进行分组,但您没有聚合任何内容

SELECT COUNT(id) as row_count, node_name FROM( SELECT * FROM mfw_navnode ) AS DD
WHERE (node_name='Eby' OR node_name='Laa'  OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn' )
GROUP BY DD.node_name
order by node_name desc

此外,我不确定为什么您需要内联选择,因为 where 可能只是在原始选择上(也许您有更复杂的事情发生,您没有显示)

SELECT COUNT(id) as row_count, node_name 
from mfw_navnode
WHERE node_name='Eby' OR node_name='Laa'  OR node_name='MIF' OR node_name='Amaur' OR node_name='Asn' 
GROUP BY node_name
order by node_name desc
于 2012-05-16T15:12:46.237 回答