我有一个名为post
的表,其中包含具有以下结构的Wordpress帖子:
ID post_title post_type
1 foo1 zoacres-property
2 foo2 zoacres-property
3 foo3 zoacres-property
4 foo4 post
每个zoacres-property
帖子都有一个存储在meta
表中的元:
meta_id post_id meta_key meta_value
100 1 price 5000
101 2 price 10000
102 3 price 0
我正在尝试按价格过滤zoacres-property
帖子,我使用以下查询成功地做到了这一点:
SELECT *
FROM post p
LEFT JOIN meta m ON p.ID = m.post_id AND m.meta_key = 'price'
AND p.post_type = 'zoacres-property'
GROUP BY p.ID
ORDER BY m.meta_value+0
LIMIT 0,6
返回:
ID post_title post_type meta_id post_id meta_key meta_value
3 foo3 zoacres-property 102 3 price 0
1 foo1 zoacres-property 100 1 price 5000
2 foo2 zoacres-property 101 2 price 10000
这个结果是正确的,但是,我想首先显示价格为0
的所有属性(如输出中所示(,然后,我需要使用DESC
显示价格为非0的属性,所以我想要的正确输出是:
ID post_title post_type meta_id post_id meta_key meta_value
3 foo3 zoacres-property 102 3 price 0
2 foo2 zoacres-property 101 2 price 10000
1 foo1 zoacres-property 100 1 price 5000
正如你所看到的,价格为0
的帖子是第一个显示的,然后我想得到所有价格从高到低的帖子。有可能做到这一点吗?
我还在这里创建了一个FIDDLE。
您可以使用条件排序作为
SELECT *
FROM post p
JOIN meta m ON p.ID = m.post_id AND m.meta_key = 'price'
AND p.post_type = 'zoacres-property'
ORDER BY m.meta_value+0 = 0 desc, m.meta_value+0 desc
LIMIT 0,6
演示