出于某种原因,这是今晚我的想法。我有3个表,约会,客户,任务。我正在尝试获取今天或明天的所有约会,检查用户表以提取当前客户端和任何家庭成员,然后提取符合其他条件的任务以获取当天或过期的任务的完整列表。
在客户端表上,我们从另一个数据源导入信息,保持原始id为reference_id,如果他们没有parent_id,则他们是父级,否则他们是子级。
appointment table
id | user_id | client_id | start_at
1 1 2 2018-02-15
2 1 1 2018-02-15
3 1 2 2018-02-15
4 2 4 2018-02-15
clients table:
id | reference_id | parent_id | user_id
1 35 null 1
2 36 35 1
3 37 35 1
4 35 null 2
5 36 35 2
tasks table
id | client_id | task | due_date
1 2 do something 2018-02-15
2 4 do something 2018-01-10
3 2 do something 2018-02-01
4 2 do something 2018-05-15
我开始尝试将表连接到自身,但是当我尝试组合父项时,它最终会杀死所有结果,但只有当我向查询添加WHERE parent_id > 0
时才会这样做。在此之前我得到了大约40个结果,但应该远远超过100.在数据集中,我有50个约会,一些用户有2-5个孩子/关系,但我不确定为什么,因为我正在做{{1}而不是内连接,如果有什么我应该开始以冗余的额外结果结束。
LEFT JOIN
有没有比加入客户端表3次更好的设计方法?为什么它会删除添加SELECT
start_at,
clients.id,
clients.reference_id,
clients.parent_id,
clients.first_name,
clients.last_name,
children.user_id,
children.first_name,
children.last_name,
children.reference_id,
children.parent_id,
parents.last_name
FROM
`reminderdental2`.`appointments` AS appointment
INNER JOIN clients AS clients
ON appointment.patient_id = clients.id
INNER JOIN clients AS children
ON clients.parent_id = children.parent_id
LEFT JOIN
(SELECT
reference_id,
user_id,
last_name,
first_name,
parent_id
FROM
clients WHERE parent_id > 0) AS parents
ON clients.parent_id = parents.reference_id
WHERE clients.user_id = '27'
AND children.user_id = '27'
AND parents.user_id = '27'
AND start_at > NOW() - INTERVAL 1 DAY
AND start_at < NOW() + INTERVAL 1 DAY
的查询?