MYSQL中关于另一列的条件Distinct

MYSQL中关于另一列的条件Distinct,mysql,join,sql-order-by,Mysql,Join,Sql Order By,我有如下疑问 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(一个用

我有如下疑问

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\u product\u manufacturer\u value='12',另一个用于cf.field\u product\u manufacturer\u value='57'),我使用group by子句消除了这两个记录。但问题是,我想得到一个特定的id,它有更大的“field\u product\u price\u value”,但不知怎的,它给了我更小的值。如果我查询它的“57”,那么它会给我一个id,其中包含较大的字段\产品\价格\值,但当我查询它的“12”时,它会给我一个id,其中包含较小的“字段\产品\价格\值”。是否有任何方法可以指定选择“字段\产品\价格\值”更大的id

您应该使用
max(字段\产品\价格\值)
并结合适当的GROUP BY子句

通常,只有在查询中同时选择普通列和聚合函数(
MIN、MAX、COUNT、AVG
)时,才应使用
GROUPBY
-子句。

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

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
除非您真的知道自己在做什么,否则当您使用
分组依据
时,请确保
选择
中的所有未聚合列都在
分组依据

'2' > '12'

如果我们说的是瓦查尔。我相信你应该把你的字段转换成数字类型,你的排序会很好。阅读此内容了解更多信息。

使用列列表,避免
选择*