Mysql顺序结果由一些类似列值的总和

时间:2013-04-13 04:16:05

标签: php mysql sql wordpress

有两个表,我试图从一个表中获取值,并按另一个表中的值之和进行排序。

所以只是为了清楚我试图通过meta_key的总和得到所有帖子的列表,其中元键如 reaction

这是我试过的

ORDER BY ( SELECT SUM(CAST(meta_value AS UNSIGNED)) as count FROM `wp_postmeta` WHERE `meta_key` LIKE '_reaction_button%' GROUP BY post_id )

但不幸的是,这不起作用。那么有什么解决方案吗?我认为这可以使用视图或存储过程完成,但要弄清楚如何。

实际上我正在使用wordpress并使用query_posts来获取帖子,但似乎我不能用query_posts或WP_Query这样做,这就是我编写自定义查询的原因。如果可以使用query_posts或WP_Query完成,那么它真的很棒。

Here is my main table

Another table where post_id is the foreign key to the first table

3 个答案:

答案 0 :(得分:0)

试试这个。

首先创建一个临时表来保存和值。然后使用wp_post表进行连接,并使用临时表的和列上的顺序

CREATE TEMPORARY TABLE tempTable (postID int,countSum int)

INSERT INTO tempTable
SELECT post_id,SUM(CAST(meta_value AS UNSIGNED))
FROM `wp_postmeta` 
GROUP BY post_id


SELECT wp_post.* FROM `wp_post`
INNER JOIN tempTable
  ON wp_post.ID=tempTable.postID 
ORDER BY countSUM

DROP TABLE tempTable

答案 1 :(得分:0)

select p.*
from 'wp_post' p
join (
    select post_id, sum(cast(meta_value as unsigned)) as sum_val
    from 'wp_postmeta'
    where 'meta_key' like '_reaction_button%'
    group by post_id
) pm on p.post_id = pm.post_id
order by pm.sum_val

答案 2 :(得分:0)

你真的不需要直接使用mysql,你可以WP_Query

$query = new WP_Query( array ( 
                             'post_type' => 'post', 
                             'meta_key' => 'vote_field', 
                             'orderby' => 'meta_value', 
                             'order' => 'ASC' ) );

您也可以使用meta_compare

'meta_key' => 'metadata1',
'orderby' => 'meta_value_num'

然后您还可以使用'compare' => 'LIKE''compare' => 'NOT LIKE'

或者您可以在此处查看此示例:Wordpress Sum meta_values from posts and order them per category并将类别更改为您需要的内容..