2013-01-07 88 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