Php 来自具有多个条件的另一个表的数据
我有两张桌子 表:交易Php 来自具有多个条件的另一个表的数据,php,mysql,join,Php,Mysql,Join,我有两张桌子 表:交易 id . user_id . amount . status 1 - - 100 -- --- 500 - ----- 1 2 - - 100 -- --- 100 - ----- 0 3 - - 110 -- --- 200 - ----- 1 4 - - 100 -- --- 220 - ----- 1 5 - - 117 -- --- 120 - ----- 1 6 - - 122 -- --- 300 - ----- 1 id . user_id . bid .
id . user_id . amount . status
1 - - 100 -- --- 500 - ----- 1
2 - - 100 -- --- 100 - ----- 0
3 - - 110 -- --- 200 - ----- 1
4 - - 100 -- --- 220 - ----- 1
5 - - 117 -- --- 120 - ----- 1
6 - - 122 -- --- 300 - ----- 1
id . user_id . bid . status . budget . expense . size. priority
1 -- 100 ---- 80 --- 0 ------- 200 ------ 200 --- 5 -- 1
2 -- 109 ---- 75 --- 1 ------- 050 ------ 030 --- 2 -- 2
3 -- 100 ---- 65 --- 1 ------- 700 ------ 065 --- 2 -- 4
4 -- 107 ---- 77 --- 0 ------- 020 ------ 020 --- 2 -- 3
5 -- 90 ----- 87 --- 1 ------- 120 ------ 090 --- 7 -- 7
这意味着按用户存款,但仅状态=1有效
表:活动
id . user_id . amount . status
1 - - 100 -- --- 500 - ----- 1
2 - - 100 -- --- 100 - ----- 0
3 - - 110 -- --- 200 - ----- 1
4 - - 100 -- --- 220 - ----- 1
5 - - 117 -- --- 120 - ----- 1
6 - - 122 -- --- 300 - ----- 1
id . user_id . bid . status . budget . expense . size. priority
1 -- 100 ---- 80 --- 0 ------- 200 ------ 200 --- 5 -- 1
2 -- 109 ---- 75 --- 1 ------- 050 ------ 030 --- 2 -- 2
3 -- 100 ---- 65 --- 1 ------- 700 ------ 065 --- 2 -- 4
4 -- 107 ---- 77 --- 0 ------- 020 ------ 020 --- 2 -- 3
5 -- 90 ----- 87 --- 1 ------- 120 ------ 090 --- 7 -- 7
我需要在下面过滤后的活动id(使用php和mysql)
条件:
01. campaign.status = 1
02. campaign.size = 2
03. campaign.budget > campaign.expense
04. those user_id has balance (balance = A - B)
A = sum(transaction.amount where transaction.status=1)
B = sum(campaign.expense)
05. order by bid max value
预期输出campaign.id=3
for campaign.id 3 : status 1, size 2, budget 700 > expense 65
balance > 0 means for user_id 100 = A(500+220) > B(200+65) //means A-B = 455
我不是那么专业。尝试了几种方法
请帮帮我,解决后我会睡觉的。损失2天。一种可能的解决方案:
SELECT *
FROM campaign c
WHERE
c.status = 1
AND c.size = 2
AND c.budget > c.expense
AND
( SELECT sum( amount )
FROM transaction t
WHERE t.user_id = c.user_id
)
-
( SELECT sum( expense )
FROM campaign c1
WHERE c.user_id = c1.user_id AND t.status=1
)
> 0
;
还有一个:
SELECT c.*
FROM (
SELECT user_id, sum( amount ) amount
FROM transaction t
WHERE EXISTS(
SELECT 1 FROM campaign c
WHERE t.user_id = c.user_id
AND c.status = 1
AND c.size = 2
AND c.budget > c.expense
)
GROUP BY user_id
) q1
JOIN (
SELECT user_id, sum( expense ) expense
FROM campaign c
WHERE EXISTS(
SELECT 1 FROM campaign c1
WHERE c.user_id = c1.user_id
AND c1.status = 1
AND c1.size = 2
AND c1.budget > c.expense
)
GROUP BY user_id
) q2
ON q1.user_id = q2.user_id AND q1.amount - q2.expense > 0
JOIN campaign c
ON c.user_id = q1.user_id
WHERE c.status = 1
AND c.size = 2
AND c.budget > c.expense
演示(两个查询):
请在您的数据上尝试这两种方法,我不确定哪一种效果更好(可能是第一种)。
两个查询都至少需要两个表的
user\u id
列上的索引才能获得更好的性能:
CREATE INDEX camp_user_id ON campaign( user_id );
CREATE INDEX trans_user_id ON transaction( user_id );
什么不起作用?您是否收到错误消息?什么是
资金
?我不了解您的条件据我所知,这应该可以工作:从transaction.user\u id=campaign.user\u id中选择campaign.id,其中campaign.status=1,campaign.size=2,campaign.budget>campaign.expense和SUM(transaction.amount)>SUM(campaign.expense)按活动下单。出价说明条件4已解释,请查看并填写您认为ok有余额(余额=A-B)
=A-B>0
=A>B
=sum(交易.金额)>sum(活动.费用)
=>从活动加入交易中选择活动.id,其中活动.status=1,活动.size=2,活动.budget>campaign.expense AND transaction.status=1,SUM(transaction.amount)>SUM(活动.expense)ORDER BY campaign.bid DESC
第一个已编辑。请看,我编辑了你的答案