如何筛选具有特定条件的记录



我有一个名为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

演示

最新更新