需求:查询平台用户邀请人的投资记录
思路:先是多表联查出结果,然后优化SQL
tb_fund_user 用户表,
tb_p2p_orderitem 订单详情 (订单详情是用户表,订单表,产品表的关联关系表)
tb_p2p_order 订单表
tb_p2p_product 产品表
SQL语句:
SELECT r.`name` AS 用户名,
r.`tel` AS 手机号码,
o.`order_amount` AS 投资金额,
o.`order_time` AS 投资时间,
p.`product_valid_period` AS 投资期限
FROM fpfund.`tb_fund_user` r,fp2p.`tb_p2p_orderitem` m,fp2p.tb_p2p_order o,fp2p.tb_p2p_product p
WHERE m.`order_id` = o.`ID` AND m.`product_id` = p.`ID` AND m.`custom_i_d` = r.`id`
AND r.id IN(SELECT u.`id` FROM fpfund.`tb_fund_user` u WHERE u.`referee_id`='此处省略用户的邀请人ID')
AND p.`sell_status` !='7'
优化后 SQL:
SELECT r.`name` AS 用户名,
r.`tel` AS 手机号码,
o.`order_amount` AS 投资金额,
o.`order_time` AS 投资时间,
o.`product_valid_period` AS 投资期限
FROM fpfund.`tb_fund_user` r
LEFT JOIN(
SELECT m.`custom_i_d`,
`order_amount`,
o.`order_time`,
p.`product_valid_period`
FROM `tb_p2p_orderitem` m,tb_p2p_order o,tb_p2p_product p
WHERE m.`order_id` = o.`ID` AND m.`product_id` = p.`ID`
AND p.`sell_status` !='7'
) o
ON r.`id` = o.custom_i_d
WHERE r.`referee_id`='此处省略用户的邀请人ID' AND o.custom_i_d IS NOT NULL
换个思路优化后 SQL:
SELECT r.`name` AS 用户名,
r.`tel` AS 手机号码,
o.`order_amount` AS 投资金额,
o.`order_time` AS 投资时间,
p.`product_valid_period` AS 投资期限
FROM `tb_p2p_orderitem` m,tb_p2p_order o,tb_p2p_product p,
(SELECT u.id,u.name,u.tel
FROM fpfund.`tb_fund_user` u
WHERE u.`referee_id` = '此处省略用户的邀请人ID'
) r
WHERE m.`order_id` = o.`ID`
AND m.`product_id` = p.`ID`
AND m.`custom_i_d` = r.`id`
AND p.`sell_status` != '7'