我已经搜索了一段时间,但无济于事。我发现可能的答案令人困惑,并希望有人能为我清除它。
我有两个表(任务和安装),它们包含相似的数据,但不相同,并且除了它们都属于同一分支之外,这两个表之间没有关系。例如:
任务表
id
branch_id
task_name
to_be_billed
created
安装表
id
branch_id
install_details
to_be_billed
created
我试图弄清楚如何获得一个结果集,该结果集将显示任一表中的每条记录,并按创建日期的顺序排列,并且仅在“ to_be_billed”列为“ 1”的地方。
有人可以给我一些指示吗?
谢谢
答案 0 :(得分:1)
我假设您想使用branch_id获得结果,并且这两个表(“任务”和“安装”)与BranchTable有某些关系。
我还假设“任务和安装表”具有分支的多个记录。
BranchTable->find()
->contain([
'Tasks' => [
'sort' => ['Tasks.created' => 'ASC']
]
])
->contain([
'Installs' => [
'sort' => ['Installs.created' => 'ASC']
]
])
->matching('Tasks', function ($q){
return $q->andWhere(['Tasks.to_be_billed' => 1]);
})
->matching('Installs', function ($q){
return $q->andWhere(['Installs.to_be_billed' => 1]);
})
->where(['Branch.id' => $foo]);
如果您的疑问没有使用这些假设,请告诉我。
答案 1 :(得分:0)
如果您尝试使用一个数据库查询来获取数据,则需要使用UNION运算符。
在这种情况下,您需要这两个查询具有相同的列,例如:
select
id,
branch_id,
task_name,
NULL as install_details,
'task' as type,
to_be_billed,
created
from
tasks_table
UNION
select
id,
branch_id,
NULL as task_name,
install_details,
'install' as type,
to_be_billed,
created
from
install_table
但这是一个相当肮脏的解决方案。
如果我知道您到底想达到什么目的,也许我可以建议一个更好的答案。