首页 > 解决方案 > 将两个 MYSQL 查询列结果合并为一个以在 ORDER BY 中使用

问题描述

我有两个查询来获取用户硬币和宝石价值。我可以单独获取每个字段值,但我希望它们一起作为附加值..(硬币+宝石)值在 ORDER BY 中使用

使用此 SQL 查询,我可以获得硬币字段值...

SELECT user_id, meta_value as total_coins FROM wp_usermeta WHERE meta_key = '_coin' AND meta_value > 0 ORDER BY meta_value+0 DESC LIMIT 0,10

币种查询结果

并使用它来获取 gems 字段值...

SELECT user_id, meta_value as total_gems FROM wp_usermeta WHERE meta_key = '_gems' AND meta_value > 0 ORDER BY meta_value+0 DESC LIMIT 0,10

宝石查询结果

我想要的是获取_coin字段值,然后为该 user_id 获取_gem字段值,然后将这两个值合二为一...例如 690+21 = 711 作为 total_points .. 像这样的东西..

`SELECT ( 

    SELECT meta_value FROM `wp_usermeta` as ue1

    WHERE meta_key = '_coin' AND meta_value > 0 ORDER BY meta_value+0 DESC LIMIT 0,50

) AS coins,
( 

    SELECT meta_value FROM `wp_usermeta` as ue2 

    WHERE ue2.user_id = ue1.user_id AND meta_key = '_gem' AND meta_value > 0 ORDER BY meta_value+0 DESC LIMIT 0,50

) AS gems,

coins+gems AS total_points

FROM wp_usermeta

ORDER BY total_points LIMIT 0, 50`

我知道这个 SQL 不正确,这就是我需要帮助的原因。请帮我纠正这个 SQL

标签: mysqlwordpress

解决方案


而不是几个子查询,您应该使用连接同一个表并重复添加代码

  SELECT ue1.meta_value coins , ue2.meta_value gems
       , ue1.meta_value + ue2.meta_value total_points
  FROM `wp_usermeta` as ue1
  INNER JOIN `wp_usermeta` as ue2 ON ue1.user ue2.user_id = ue1.user_id
      AND ue1.meta_key = '_coin' 
        AND ue2. meta_key = '_gem'
  WHERE ue1.meta_value > 0 
  AND   ue2.meta_value > 0 
  ORDER BY total_points LIMIT 0, 50

推荐阅读