【发布时间】:2011-02-24 20:02:17
【问题描述】:
我觉得有一个简单的解决方案——我查看了有关 Stack Overflow 的其他问题,但它们似乎效率低下,或者我做错了。
这是我正在使用的表格的简化版本。
CREATE TABLE object_values (
object_value_id INT PRIMARY KEY,
object_id INT,
value FLOAT,
date_time DATETIME,
INDEX (object_id)
);
CREATE TABLE object_relations (
object_group_id INT,
object_id INT,
INDEX (object_group_id, object_id)
);
存在多对一关系——每个对象有多个对象值(每个对象平均有 150 个对象值)
我想根据 object_group_id 获取每个 object_id 的最后一个对象值(由 date_time 字段确定)。
当前查询:
SELECT a.`object_id`, a.`value`
FROM `object_values` AS a
LEFT JOIN `object_relations` AS b
ON ( a.`object_id` = b.`object_id` )
WHERE b.`object_group_id` = 105
ORDER BY a.`date_time` DESC
这会拉回所有记录——如果我执行 GROUP BY a.object_id 那么 ORDER BY 会被忽略
我尝试了一系列变体——我很抱歉,因为我知道这是一个常见问题,但尝试其他解决方案到目前为止还没有完全奏效。任何帮助将不胜感激。
一些解决方案在大约 70 秒后返回结果 - 这是一个大型系统,因此需要更快一些。
【问题讨论】:
-
我怀疑 order by 被忽略了;
GROUP BY可能不会返回您想要的记录,但最终行将被排序。您没有退回您订购的商品,那么如何验证这一点?我猜想整个查询格式不正确并返回错误/丢失的行。
标签: mysql many-to-one