我不是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 -使用。*并非最佳实践,原因有很多。