2013-01-07 48 views
0

我不是SQL專家,因此需要您的幫助。按訂單SQL順序 - 無法按指定列排序

我有別人寫這種先進的查詢:

SELECT cms_product_bid.*, 
    cms_products.*, 
    cms_products_images.pd_image, 
    cms_products_images.pd_image_label, 
    IF (cms_product_bid.pd_bid = 1, 
     IF(cms_product_bid.pd_bid_start_date <= CURDATE(), 
      IF(cms_product_bid.pd_bid_end_date >= CURDATE(),1,0) 
     ,0) 
    ,1) AS bid_product_check 
FROM cms_products 
LEFT JOIN cms_products_images 
ON (cms_products.pd_id = cms_products_images.pd_id) 
INNER JOIN cms_product_bid 
ON (cms_product_bid.product_id = cms_products.pd_id) 
INNER JOIN cms_home_product_slider 
ON (cms_products.pd_id = cms_home_product_slider.pd_id) 
WHERE cms_products.pd_status=1 
    AND cms_products.pd_visibility=1 
    AND cms_home_product_slider.cat_id='$featured_cat_id' 
GROUP BY cms_products.pd_id 
HAVING(bid_product_check =1) 
ORDER BY cms_products.pd_sort ASC 

所有我試圖做的是cms_products.pd_sort排序,但它不是由該列,即使列排序是有在表值如1,2等。

任何人都可以在這裏指出問題嗎?

+0

輸出表定義或「pd_sort」字段的類型 – silly

+0

該列的類型爲smallint – Dev01

回答

2

我的猜測是,你的列是VARCHAR型或的,你可以簡單地CAST

SELECT... 
FROM... 
WHERE... 
ORDER BY CAST(cms_products.pd_sort AS SIGNED) ASC 
+0

否它不是varchar,實際上它是smallint類型 – Dev01

+0

鑄造時沒有小任務。 –

+0

但是我不是在上面的查詢中看到的 – Dev01

1

它可能是一個錯誤......但儘量列出列,而不是使用的。*快捷方式...然後查看該列是否會被正確識別和排序。

btw - 由於許多原因,使用*不是最佳實踐。

+0

+1感謝您的建議 – Dev01