WordPress数字元排序无序

时间:2014-04-27 11:33:49

标签: wordpress wp-query

我有一个按数字元值排序的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之前)。

我尝试过以不同的方式重新编写查询来处理这个问题,但我没有运气。

老实说,我甚至不确定为什么这些都不正常。

任何人都可以对此有所了解吗?

1 个答案:

答案 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。