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);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题