SQL按问题排序-不能按指定的列排序


SQL order by issue - cannot order by column specified

我不是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等值。

谁能指出这里的问题?

我的猜测是您的列类型为VARCHAR字符串,您可以简单地CAST

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

这可能是一个bug…但尽量列出列,而不是使用。*快捷键…然后看看该列是否被正确识别和排序。

btw -使用。*并非最佳实践,原因有很多。