到目前为止,我有这个代码在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之前显示。但是,它不是。
非常感谢提前。
答案 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";