0

我有如下查询

SELECT * FROM content_type_product cp
JOIN content_field_product_manufacturer cf ON cf.nid = cp.nid group by cp.nid
ORDER
  BY field(cf.field_product_manufacturer_value,'12') DESC,
  cp.field_product_price_value DESC

这工作完美只是一个小缺陷,有两个具有相同 id 的记录(一个用于 cf.field_product_manufacturer_value='12',另一个用于 cf.field_product_manufacturer_value = '57'),我使用 group by 子句消除了它们。但问题是我想获得具有更大“field_product_price_value”的特定ID,但不知何故它给了我较小的价值。如果我查询它为“57”,那么它给我的 id 具有更大的 field_product_price_value,但是当我查询它为 '12' 它给我的 id 为较小的“field_product_price_value”。有什么方法可以指定选择具有更大“field_product_price_value”的ID

4

3 回答 3

1

您应该max(field_product_price_value)与适当的 GROUP BY 子句结合使用。

通常,只有在查询中同时选择普通列和聚合函数 ( ) 时,才应使用GROUP BY-clause MIN, MAX, COUNT, AVG

于 2012-10-08T13:39:26.140 回答
0

您的查询正在使用 MySQL 的一个(错误)功能,称为隐藏列。SELECT仅当和 中的所有未聚合列GROUP BY具有相同的值时,才建议这样做。情况并非如此,因此您需要自己选择正确的记录:

SELECT cp.*, cf.*
FROM content_type_product cp JOIN
     content_field_product_manufacturer cf
     ON cf.nid = cp.nid join
     (select cf.nid, max(field_product_price_value) as maxprice
      from content_field_product_manufacturer 
      group by cf.nid
     ) cfmax
     on cf.nid = cfmax.nid and cf.field_product_price_value = cfmax.maxprice
ORDER BY field(cf.field_product_manufacturer_value,'12') DESC,
      cp.field_product_price_value DESC

除非您真的知道自己在做什么,否则当您使用 a 时GROUP BY,请确保 中的所有未聚合列SELECT都在GROUP BY.

于 2012-10-08T13:47:35.220 回答
0
'2' > '12'

如果我们在谈论 varchars。我相信您应该将您的字段转换为数字类型,并且您的排序会正常工作。阅读本文了解更多信息。

于 2012-10-08T13:51:03.823 回答