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を持つ2つのレコードがあります(1つはcf.field_product_manufacturer_value = '12'用で、もう1つはcf.field_product_manufacturer_value = '57'用です)。しかし、問題は、「field_product_price_value」が大きい特定のIDを取得したいのですが、どういうわけか、小さい値が得られることです。'57'をクエリすると、field_product_price_valueが大きいIDが得られますが、'12'をクエリすると、"field_product_price_value"が小さいIDが得られます。「field_product_price_value」が大きいIDを選択するように指定できる方法はありますか?

4

3 に答える 3

1

max(field_product_price_value)適切なGROUPBY句と組み合わせて使用​​する必要があります。

一般に、クエリで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

自分が何をしているのかを本当に理解していない限り、を使用するときは、GROUP BY内のすべての集約されていない列がにあることを確認しSELECTGROUP BYください。

于 2012-10-08T13:47:35.220 に答える
0
'2' > '12'

varcharsについて話している場合。フィールドを数値タイプに変換する必要があり、ソートは正常に機能すると思います。詳細については、この記事をお読みください。

于 2012-10-08T13:51:03.823 に答える