MySQL查询。按元关键字排序

时间:2012-03-24 作者:Z. Zlatev

我已经为此奋斗了很长时间,开始觉得我错过了一些重要的东西。CPT帖子可以有元数据,也可以没有元数据(_vip_post [0|1], _thumbnail_id [null|numeric] ).

如果我查询_thumbnail_id 没关系,而且有效:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* 
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = \'_thumbnail_id\')
ORDER BY 
    m.meta_key DESC,
    wp_posts.post_date DESC
首先返回带有缩略图的帖子,_thumbnail_id = null位于最后。现在已经足够好了。工作

但如果我询问我的新_vip_post meta\\u键在排序时完全被忽略。相同的模式。

SELECT SQL_CALC_FOUND_ROWS wp_posts.* 
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = \'_vip_post\')
ORDER BY 
    m.meta_key DESC,
    wp_posts.post_date DESC 
刚订购人post_date. 不工作。

1 个回复
最合适的回答,由SO网友:keatch 整理而成

兹拉捷夫

meta_key 是自定义帖子类型的名称,是VARCHAR(255)
meta_value 是键的值,是一个长文本

在查询中,您不是按值排序,而是按字段名称排序。查询适用于\\u thumbnail\\u id,因为您使用的是LEFT JOIN,并且CPT可能为null。

您可以查看是否运行此查询

SELECT SQL_CALC_FOUND_ROWS wp_posts.* ,m.*
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = \'_thumbnail_id\')
ORDER BY 
    m.meta_key ASC,
    wp_posts.post_date DESC
查看meta\\u键的null

在第二种情况下,CPT \\u vip\\u post始终存在,因此字段名上的排序不起作用。您必须按meta\\u值排序。

尝试以下操作:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* ,m.*
FROM wp_posts  
LEFT JOIN wp_postmeta m ON ( wp_posts.ID = m.post_id AND m.meta_key = \'_vip_post\')
ORDER BY 
    m.meta_value ASC,
    wp_posts.post_date DESC
您可以使用*m.meta\\u value DESC*更改顺序。

结束

相关推荐

Multiple Custom Field Query

我有一个独特的情况,我需要筛选2个自定义字段,其中第一个字段是过期字段,并且“”和大于todays date的值是有效的,而2个字段是一个应该大于某个值的数字。所以理想情况下,我需要在第一个场和第二个场之间,为第1个场的2个可能性建立一个OR关系。我们将非常感谢您在这方面提供的任何帮助。