0

私は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値を持つテーブルにあるにもかかわらず、その列でソートされていません。12

誰でもここで問題を指摘できますか?

4

2 に答える 2

2

私の推測では、あなたの列は typeVARCHARまたはstringであると思います。単純CASTにそれを行うことができます

SELECT...
FROM...
WHERE...
ORDER BY CAST(cms_products.pd_sort AS SIGNED) ASC
于 2013-01-07T13:54:56.677 に答える
1

バグかもしれません...しかし、.*ショートカットを使用する代わりに列をリストしてみてください...そして、その列が認識され、正しくソートされるかどうかを確認してください。

ところで - .* を使用することは、多くの理由でベスト プラクティスではありません。

于 2013-01-07T13:55:39.110 に答える