在排序之前尝试在 MariaDB 中对 table 进行分组
Trying to group a table in MariaDB before sorting it
我正在尝试对 table 进行分组,然后按如下方式排序:
SELECT *
FROM (
SELECT meditators.token, meditators.id, meditators.udid, meditations.id AS meditations_id, meditations.datetime FROM meditations, meditators
WHERE meditations.meditator=meditators.id
ORDER BY meditations.id DESC
) AS sub
GROUP BY sub.udid
然而结果 returns 是列表的第一个元素而不是最后一个元素,因为他的排序暗示了这一点。
反向执行:
SELECT meditators.token, meditators.id, meditators.udid, meditations.datetime, meditations.id AS meditations_id FROM meditations, meditators
WHERE meditations.meditator=meditators.id
ORDER BY meditations.id DESC
正确地 returns 有序列表。
事实上已经在执行:
SELECT *
FROM (
SELECT meditators.token, meditators.id, meditators.udid, meditations.id AS meditations_id, meditations.datetime FROM meditations, meditators
WHERE meditations.meditator=meditators.id
ORDER BY meditations.id ASC
) AS sub
returns 无序列表。这似乎不是对有序列表进行分组的正确方法,正确的方法是什么?
事实上,我在以下位置找到了 post:
https://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/
不过,这似乎完全排除了我的技术,但没有指定替代技术。
我发现解决方案是设置:
set @@optimizer_switch='derived_merge=OFF';
在执行查询之前。但这似乎是一个解决方案,是否有更好的解决方案来满足我的需求?
我正在尝试对 table 进行分组,然后按如下方式排序:
SELECT *
FROM (
SELECT meditators.token, meditators.id, meditators.udid, meditations.id AS meditations_id, meditations.datetime FROM meditations, meditators
WHERE meditations.meditator=meditators.id
ORDER BY meditations.id DESC
) AS sub
GROUP BY sub.udid
然而结果 returns 是列表的第一个元素而不是最后一个元素,因为他的排序暗示了这一点。 反向执行:
SELECT meditators.token, meditators.id, meditators.udid, meditations.datetime, meditations.id AS meditations_id FROM meditations, meditators
WHERE meditations.meditator=meditators.id
ORDER BY meditations.id DESC
正确地 returns 有序列表。
事实上已经在执行:
SELECT *
FROM (
SELECT meditators.token, meditators.id, meditators.udid, meditations.id AS meditations_id, meditations.datetime FROM meditations, meditators
WHERE meditations.meditator=meditators.id
ORDER BY meditations.id ASC
) AS sub
returns 无序列表。这似乎不是对有序列表进行分组的正确方法,正确的方法是什么?
事实上,我在以下位置找到了 post: https://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/ 不过,这似乎完全排除了我的技术,但没有指定替代技术。
我发现解决方案是设置:
set @@optimizer_switch='derived_merge=OFF';
在执行查询之前。但这似乎是一个解决方案,是否有更好的解决方案来满足我的需求?