我有3张桌子:bill_plans, biling_types, users
Bill_plans
id, user_id, bill_plan_value, bill_type_id, bill_plan_date
1 1 100 7 2017-04-13
2 1 50 4 2017-03-13
3 1 70 7 2017-03-24
4 1 28 3 2017-02-21
Billing_types
id, bill_type, parent_id
3 Платний 1
4 Безплатний 1
5 Адміністративний 2
6 Маркетинговий 2
7 Розвитку 2
2 Внутрішній білінг 0
1 Клієнтський білінг 0
用户
id, name
1, Адмін
2, Carl
3, Peter
id, user_id, bill_plan_value, bill_type_id, bill_plan_date, bill_type, name
1 1 100 7 2017-04-13 Розвитку Адмін
2 NULL NULL 6 NULL Маркетинговий Адмін
3 NULL NULL 5 NULL Адміністративний Адмін
4 NULL NULL 4 NULL Безплатний Адмін
5 NULL NULL 3 NULL Платний Адмін
与其他用户相同
SELECT b.*, bt.*, u.name
FROM bill_plans as b
FULL JOIN billing_types as bt ON bt.id = b.bill_type_id
FULL JOIN users as u ON u.id = b.user_id
WHERE EXTRACT (MONTH FROM b.bill_plan_date) = $dateMonth OR
b.bill_plan_date IS NULL AND bt.parent_id != 0 OR bt.parent_id IS NULL
获得
[0]=>
array(8) {
["id"]=>
int(7)
["user_id"]=>
int(1)
["bill_plan_value"]=>
string(3) "100"
["bill_type_id"]=>
int(7)
["bill_plan_date"]=>
string(10) "2017-04-13"
["bill_type"]=>
string(16) "Tax"
["parent_id"]=>
int(2)
["name"]=>
string(10) "User1"
}
[1]=>
array(8) {
["id"]=>
int(5)
["user_id"]=>
NULL
["bill_plan_value"]=>
NULL
["bill_type_id"]=>
NULL
["bill_plan_date"]=>
NULL
["bill_type"]=>
string(33) "Administration"
["parent_id"]=>
int(2)
["name"]=>
NULL
}
[0]是正确的,但是下一个结果会返回NULL用户。我需要所有用户和所有用户的账单,即使bill_plan为用户空了。
第二步 - 获取最后一个值
需要从 bill_plans 获取最后一个值,其中bill_plan_date< $ date(最近)
答案 0 :(得分:0)
CROSS JOIN
SELECT b.*, bt.*, u.name
FROM bill_plans as b
RIGHT JOIN billing_types as bt ON bt.id = b.bill_type_id
CROSS JOIN users as u ON u.id = b.user_id
WHERE EXTRACT (MONTH FROM b.bill_plan_date) = $dateMonth
OR b.bill_plan_date IS NULL
AND bt.parent_id != 0
OR bt.parent_id IS NULL