我正在使用Laravel Lumen和MYSQL作为按需交付服务的数据库来开发移动应用程序的后端,该应用程序的简单思想是用户创建取件请求(我有1个订单或多个订单,每个订单有自己的下车地点),驾驶员应在地图上同时跟踪上车和下车地点。
最终,我最终得到包含取件省份,取件位置,取件时间等的取件表,以及包含取件ID作为外键,取件省份,取件位置以及其他订单详细信息的订单表。
现在让它变得更加清晰:
1 pickup may have 1 order within,
1 pickup may have 5 orders within
我需要的是在1个查询中同时获得接送地点和与驾驶员特定省份相关的下车地点,这可能吗?如果不是,那么解决该问题的最佳数据库设计是什么。
任何帮助将不胜感激
答案 0 :(得分:0)
假设每个订单只有一个提货和下车地点,我将更改您的架构以具有一个locations
表。
locations
id
name
address
province
...etc...
orders
id
pickup_id references locations
pickup_at
dropoff_id references locations
dropoff_at
...more info about the order...
您可能需要单独的提取表和提取表,每个表都引用位置,但是重要的是将位置标准化为一个表并对其进行引用。
现在我们可以将订单连接到他们的位置。订单及其取放地点的基本查询是...
select ...
from orders o
join locations lp on lp.id = o.pickup_id
join locations ld on ld.id = o.dropoff_id
where ...
group by o.id;
我们可以使用它来查找在某个省份中有取货或取货的订单。
select
o.id,
lp.name as pickup,
lp.province as pickup_province,
ld.name as dropoff,
ld.province as dropoff_province
from orders o
join locations lp on lp.id = o.pickup_id
join locations ld on ld.id = o.dropoff_id
where ? in (lp.province, ld.province)
group by o.id;
位置订单。
select o.id, lp.name as pickup, ld.name as dropoff
from orders o
join locations lp on lp.id = o.pickup_id
join locations ld on ld.id = o.dropoff_id
where ? in (lp.name, ld.name)
group by o.id;
订单完全在一个省内
select o.id, ld.province as province
from orders o
join locations lp on o.pickup_id = lp.id
join locations ld on o.dropoff_id = ld.id
where lp.province = ld.province
group by o.id
还有更多