我需要先按日期对查询进行排序...
所以我用了这个:
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的任何响应。
我哪里出错了?
注意,我不想对我的结果进行分组然后对它们进行排序。
我希望对它们进行排序,然后分组。分组后..我希望每个组的结果具有最高值..从组中的其他行
首先执行排序是不够的,因为即使这样,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')
按
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
当您使用某些聚合函数(总和、最大值、最小值、计数等)时,通常使用分组。如果您在查询中不使用此类函数,那么为什么要对结果进行分组?
无论如何,这应该可以解决问题:
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
以下 SQL 可能会生成所需的输出:
SELECT node_name, MAX(id)
FROM mfw_navnode
GROUP BY node_name
ORDER BY node_name
我看到你的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
此外,我不确定为什么您需要内联选择,因为位置可能只是在原始选择上(也许您有一些更复杂的事情没有显示)
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