2012-10-08 29 views
0

我有查詢如下條件的不同之處在MYSQL對於Ø另一列

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',那麼它給了我更大的field_product_price_value的id,但是當我查詢'12'時,它給了我較小的「field_product_price_value」的id。有沒有什麼辦法可以指定用更大的「field_product_price_value」來選擇ID

+0

使用列列表並避免使用SELECT *。 – Kermit

回答

1

您應該使用max(field_product_price_value)並結合相應的GROUP BY子句。

一般而言,只有在查詢中同時選擇普通列和聚合函數(MIN, MAX, COUNT, AVG)時,才應使用GROUP BY條款。

0

您查詢使用的MySQL(MIS)的功能,稱爲隱藏列。只有當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,一定要在SELECT所有未聚集列是GROUP BY

0
'2' > '12' 

如果我們在談論varchars。我相信你應該將你的領域轉換爲數字類型,你的排序將正常工作。閱讀article瞭解更多信息。

相關問題