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'
如果我们说的是瓦查尔。我相信你应该把你的字段转换成数字类型,你的排序会很好。阅读此内容了解更多信息。使用列列表,避免
选择*
。