0

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

因此,为了清楚起见,我试图通过 meta_key 的总和来获取所有帖子的列表,其中 meta_key 就像反应%

这是我尝试过的

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 来完成,那就太好了。

这是我的主表

另一个表,其中 post_id 是第一个表的外键

4

3 回答 3

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 and change category to what you need ..

于 2013-04-13T09:21:35.027 回答
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
于 2013-04-13T07:03:14.417 回答
0

尝试这个。

首先创建一个临时表来保存总和值。然后与 wp_post 表进行连接,并在临时表的 sum 列上使用 order by

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
于 2013-04-13T04:20:40.540 回答