0

我有网站http://change.is,我将它迁移到新服务器。现在其中一个 sql 查询显示奇怪的结果。查询如下:

SELECT distinct group_concat(pm.meta_value separator ' ') as composer, group_concat(pm.meta_value separator '-') as composer_link FROM $wpdb->postmeta pm where (pm.meta_key='composer_fname_value' OR pm.meta_key='composer_lname_value') and pm.post_id in (SELECT p.ID FROM $wpdb->posts p where p.post_type='quote' AND p.post_status='publish') group by pm.post_id order by group_concat(IF(pm.meta_key='composer_lname_value', pm.meta_value,'')) ASC

解释:

我在自定义帖子类型“引用”的管理部分中有诸如作者名字、作者姓氏(我在此查询中需要的)等元字段。在迁移到新服务器之前,此查询会选择作者的名字然后是作者的姓氏。所以输出变得像(Seteve Jobs,Jeff Bezos)。迁移后,我为此自定义类型“报价”添加了新帖子。但现在它是选择作者姓氏然后作者名字所以输出就像(Diamandis Peter)

点,它只为添加的新帖子选择这个,对于数据库中的旧帖子,它会很好。

请对此提供帮助,或提供替代查询

4

1 回答 1

0

看起来您想group_concat根据关联的 pm.meta_key 订购 pm.meta_values(s)。当 pm.meta_key='composer_lname_value' 时,值应该排在第一位。

在这种情况下,最简单的解决方案似乎是使用可选的 ORDER BY 子句group_concat

SELECT distinct 
 group_concat(pm.meta_value order by IF(pm.meta_key='composer_lname_value', 1,0) separator ' ') as composer,
 group_concat(pm.meta_value order by IF(pm.meta_key='composer_lname_value', 1,0) separator '-') as composer_link
 ... the rest of the query being identical...

也许这就是您想在查询末尾使用 ORDER BY 实现的目标,但这会对输出行进行排序,而不是对同一行内的内容进行排序。

于 2012-04-19T15:30:40.400 回答