id post_id meta_key meta_value 1 101 tweet_point 5 2 101 tweet_user_id 1 3 101 email_point 10 4 102 fb_point 10 5 102 fb_user_id 1 6 101 email_user_id 2 7 101 chat_point 5 8 102 tweet_point 2 9 102 tweet_user_id 2 10 101 chat_user_id 2
从上表中,如果用户ID在一个帖子上发了一条推文,在另一个帖子上发了一个fb帖子,我想把这些点加在一起。
用户标识位于与meta_key列对应的列meta_value中,例如tweet_user_id,email_user_id,chat_user_id,fb_user_id。 每个动作的相同方式点,例如fb_point,tweet_point也存储在meta_value列中,对应于meta_key值,例如tweet_point,fb_point。
我如何在php mysql中执行此操作。我正在使用wordpress。 我看到的结果如下所示
user_id total 1 15 2 17
我提出了以下代码,它只返回唯一的用户ID。
SELECT distinct (meta_value) FROM wp_postmeta WHERE meta_key IN('tweet_user_id', 'email_user_id','chat_user_id','fb_user_id')
上面的代码返回用户ID,然后我在循环查询下面运行以查找用户获得的点数。
SELECT mm.meta_value from wp_postmeta m , wp_postmeta mm WHERE m.meta_value='1' AND mm.meta_key in ('tweet_point','email_point', 'fb_point', 'chat_point') GROUP BY mm.id
它返回多行,例如
meta_value 5 3
如何在一行中对这些值求和,这样我就不需要再次循环。
答案 0 :(得分:0)
尝试使用此代码。
select user_id, count(post_id) as total from your_table group by user_id