有两个表,我试图从一个表中获取值,并按另一个表中的值之和进行排序。
所以只是为了清楚我试图通过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完成,那么它真的很棒。
答案 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并将类别更改为您需要的内容..