我的查询是这样的:
SELECT *
FROM products_categories
WHERE product_id = 1
ORDER BY updated_at DESC
如果查询运行,结果如下:
我像这样添加组:
SELECT *
FROM products_categories
WHERE product_id = 1
GROUP BY product_id
ORDER BY updated_at DESC
结果:显示1条记录(id = 1)
它不合适。如果显示的id是id = 3(latest updated_at)
我该如何解决?
答案 0 :(得分:0)
不幸的是,你被mysql的奇怪行为所困(其他一些像sqlite这样的sql引擎也是如此)。根据sql98你的sql查询不正确,应该会产生错误。您无法选择未分组或使用聚合函数(max / min / avg)的字段。不幸的是,mysql不会产生错误,但会返回错误定义字段的第一个值。
group by将合并所有具有相同product_id的行放入单行。这就是为什么你得到1(错误的)回归。我想你认为顺序会先在小组之前运行。不是这种情况。将对单个(分组)行进行排序。
如果您想获取最新的updated_at,您应该查询: 从products_categories WHERE product_id = 1中选择max(updated_at),然后在另一个select中查询使用此值的行。 (从products_categories中选择*,其中product_id = 1和updated_at =(从products_categories中选择max(updated_at),其中products_id = 1))当然,如果您的updated_at值不唯一,它可能无法正常工作。然后你会得到多个结果。
如果你需要一个答案行,你可以做 SELECT * FROM products_categories WHERE product_id = 1 ORDER BY updated_at DESC LIMIT 1;