我有一个按数字元值排序的WordPress查询,但是,查询结果略有乱序。
以下是查询:
<?php query_posts('post_type=rushmoor&meta_key=subaru_driver_best_lap&orderby=meta_value_num&order=asc');?>
查询结果可以在这里看到:
http://www.subarurallyexperience.co.uk/rushmoor/ranking/
它主要是按顺序排列,但有些情况下它的乱序,例如第1和第2位目前倒退(02.03.44应该在02.03.66之前)。
我尝试过以不同的方式重新编写查询来处理这个问题,但我没有运气。
老实说,我甚至不确定为什么这些都不正常。
任何人都可以对此有所了解吗?
答案 0 :(得分:2)
我怀疑是因为您使用meta_value_num
作为orderby
。 MySQL将尝试将值解析为数字,得到02.03,然后达到第二个小数点,此时它将放弃。所以02.03.44和02.03.66的顺序是任意的 - 它只是将2.03与2.03进行比较。
如果数据库中的所有值都是xx.xx.xx格式,那么使用meta_value
排序应该没问题。如果(例如)您将一次存储为2.03.44而另一次存储为02.03.66,则只会出现问题,在这种情况下,alpha排序会将0放在2之前。
修改强>
为了确认上述情况,the WordPress source显示meta_value_num
将元值加0以将其视为数字。 MySQL中的以下查询:
select '02.03.44' + 0, '02.03.66' + 0 from dual
为两者返回2.03。