Order By DESC / ASC在PHP Query中不起作用

时间:2011-08-22 18:48:08

标签: php mysql sql

到目前为止,我有这个代码在2循环中:

mysql_query("SELECT * FROM listing WHERE 
(category_id='$category' OR category_id_2='$category' OR category_id_3='$category') 
AND listing_status='1' AND listing_type='1' AND listing_id='$listing_id' 
ORDER BY overall DESC");

数据正好显示了我想要的内容,但是ORDER BY根本无法正常工作。我不太确定它的订购方式。整个列本身是DECIMAL(12,2)。

值仅保存到2位小数。例如,在每一行中它可以是2.56,2.89。在这种情况下,我希望2.89在2.56之前显示。但是,它不是。

非常感谢提前。

6 个答案:

答案 0 :(得分:2)

我相信你只是在查询中一次选择一个元素,比如

while(...){
    $category = ...;
    $listing_id = ...;
    // Your query which only returns one result here
}

然后,由于您的查询只返回一个结果,因此无需排序,您可以按查询执行顺序查看结果。

如果希望ORDER BY能够工作,则需要重写查询以一次性选择所需的所有行,而不是将其置于循环中。在查询中使用IN可能会对您有所帮助。

答案 1 :(得分:1)

您是否尝试按顺序将字段转换为小数?

ORDER BY CAST(overall as DECIMAL) DESC

答案 2 :(得分:1)

我设法解决了这个问题。

通过在第一个循环表中实现“整体”列,而不是第二个。它首先按整体排序数据,然后继续并从第二个表中收集其他数据。

非常感谢你的帮助。

答案 3 :(得分:0)

尝试:

mysql_query("SELECT * FROM listing WHERE 
    (category_id='$category' OR category_id_2='$category' OR category_id_3='$category') 
    AND listing_status='1' AND listing_type='1' AND listing_id='$listing_id' 
    ORDER BY overall+0 DESC");

答案 4 :(得分:0)

查询没问题。问题可能在于您如何迭代返回的数据。尝试更改它。 如果没有,请向我们提供PHP代码的完整相关部分。

答案 5 :(得分:-1)

我不知道为什么,但我发现从phpmyadmin复制和粘贴这可以解决类似的问题。 '改为` - dunno,如果它很重要。但绝对是ASC第二种方式。

重要 - 已从第二种方法中删除,将它们放在表名和列名称周围。

而不是

$sql = "SELECT * FROM 'dczcats' ORDER BY 'first' , 'second' ASC";

我输入了这个

$sql = "SELECT * FROM `dczcats` ORDER BY `dczcats`.`first` , `dczcats`.`second` ASC";