dsf6565 2016-11-10 10:57
浏览 39
已采纳

将多个MySQL查询转换为单个查询

QUERY 1...

$result = $wpdb->get_results("SELECT wp_users.ID,wp_users.user_login,wp_users.user_registered,wp_users.user_email,t.total,t.acc_nums FROM wp_users LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id ) left join (SELECT count(*) as total,user_id,Group_concat(account_number) as acc_nums FROM `user_per_bank` group by user_id) as t on t.user_id=wp_users.ID WHERE 1=1 AND ( 
  ( 
( wp_usermeta.meta_key = 'wp_capabilities' AND wp_usermeta.meta_value LIKE '%\"editor\"%' )
  )
) ORDER BY user_registered DESC", ARRAY_A);

TO BE COMBINED WITH QUERY...

$out = $wpdb->get_results('SELECT `user_id`, sum(`amount`) as outstanding FROM `assist_trans` LEFT JOIN `wp_users` ON wp_users.id = assist_trans.user_id WHERE `status` IN (0,2,4) GROUP BY assist_trans.user_id ORDER DESC');

so that "$out" variable can be dropped and I can use "$result" instead...

  • 写回答

1条回答 默认 最新

  • dreamwind1985 2016-11-10 12:12
    关注

    If I've understood your question correctly, you need to make a join from the first query to the second, and have the outstanding column in the result set. Something like this should work. It's untested, but it should point you in the right direction if I've made an error.

    The only changes (besides formatting) are the new join and the additional column in the result set.

    $result = $wpdb->get_results("SELECT wp_users.ID,
                                         wp_users.user_login,
                                         wp_users.user_registered,
                                         wp_users.user_email,
                                         t.total,
                                         t.acc_nums,
                                         o.outstanding
                                    FROM wp_users
                                         LEFT JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )
                                         LEFT JOIN (
                                             SELECT count(*) as total,
                                                    user_id,
                                                    Group_concat(account_number) as acc_nums
                                              FROM `user_per_bank`
                                           GROUP BY user_id) as t on t.user_id = wp_users.ID
                                         LEFT JOIN (
                                             SELECT `user_id`, sum(`amount`) as outstanding
                                               FROM `assist_trans`
                                                    LEFT JOIN `wp_users` ON wp_users.id = assist_trans.user_id
                                              WHERE `status` IN (0,2,4)
                                           GROUP BY assist_trans.user_id) as o ON ( wp_users.ID = o.user_id )
                                   WHERE 1=1
                                     AND ( 
                                           ( 
                                             ( wp_usermeta.meta_key = 'wp_capabilities' AND wp_usermeta.meta_value LIKE '%\"editor\"%' )
                                           )
                                         )
                                ORDER BY user_registered DESC",
                ARRAY_A);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)