主表 - 信息如下
id title times
1 主表信息 2012-02-02状态1表 - 信息 如下
id 主表.id 状态 times
1 1 正常 2012-02-02 12:12
2 1 接受 2012-02-02 12:22
3 1 出错 2012-02-02 12:32
4 1 正常 2012-02-02 12:42状态2表 - 信息 如下
id 主表.id 状态 times
11 1 收到 2012-02-02 15:12
12 1 发出 2012-02-02 15:22
13 1 未读 2012-02-02 15:32
14 1 已读 2012-02-02 15:42请问怎样 用一条SQL获得 主表的记录以及 关联表的 所有记录。也就是得到上述 表中的查询结果,谢谢!
id title times
1 主表信息 2012-02-02状态1表 - 信息 如下
id 主表.id 状态 times
1 1 正常 2012-02-02 12:12
2 1 接受 2012-02-02 12:22
3 1 出错 2012-02-02 12:32
4 1 正常 2012-02-02 12:42状态2表 - 信息 如下
id 主表.id 状态 times
11 1 收到 2012-02-02 15:12
12 1 发出 2012-02-02 15:22
13 1 未读 2012-02-02 15:32
14 1 已读 2012-02-02 15:42请问怎样 用一条SQL获得 主表的记录以及 关联表的 所有记录。也就是得到上述 表中的查询结果,谢谢!
[0] => { // 按照上述表中查出的结果
["id"] =>"1"
["title"] => "主表信息"
["times"] => "2012-02-02"
["状态1"]=>array{
[0]=>{
["id"] =>"1"
["title"] => "正常"
["times"] => "2012-02-02"
}
[2]=>{
["id"] =>"2"
["title"] => "接受"
["times"] => "2012-02-02"
}
[3]=>{
["id"] =>"3"
["title"] => "出错"
["times"] => "2012-02-02"
}
[4]=>{
["id"] =>"4"
["title"] => "正常"
["times"] => "2012-02-02"
}
}
["状态2"]=>array{
[0]=>{
["id"] =>"11"
["title"] => "收到"
["times"] => "2012-02-02"
}
[2]=>{
["id"] =>"12"
["title"] => "发出"
["times"] => "2012-02-02"
}
[3]=>{
["id"] =>"13"
["title"] => "未读"
["times"] => "2012-02-02"
}
[4]=>{
["id"] =>"14"
["title"] => "已读"
["times"] => "2012-02-02"
}
}
}
[1] => { // 这里是没有附属状态的情况
["id"] =>"2"
["title"] => "主表信息2"
["times"] => "2012-02-03"
["状态1"]=>array{}
["状态2"]=>array{}
}
…………………………………………………………
报表格式 我已经给出了 数组。3#和下方都是 期望格式array{
[0] => { // 按照上述表中查出的结果
["id"] =>"1"
["title"] => "主表信息"
["times"] => "2012-02-02"
["状态1"]=>array{
[0]=>{
["id"] =>"1"
["title"] => "正常"
["times"] => "2012-02-02"
}
[2]=>{
["id"] =>"2"
["title"] => "接受"
["times"] => "2012-02-02"
}
[3]=>{
["id"] =>"3"
["title"] => "出错"
["times"] => "2012-02-02"
}
[4]=>{
["id"] =>"4"
["title"] => "正常"
["times"] => "2012-02-02"
}
}
["状态2"]=>array{
[0]=>{
["id"] =>"11"
["title"] => "收到"
["times"] => "2012-02-02"
}
[2]=>{
["id"] =>"12"
["title"] => "发出"
["times"] => "2012-02-02"
}
[3]=>{
["id"] =>"13"
["title"] => "未读"
["times"] => "2012-02-02"
}
[4]=>{
["id"] =>"14"
["title"] => "已读"
["times"] => "2012-02-02"
}
}
}
[1] => { // 这里是没有附属状态的情况
["id"] =>"2"
["title"] => "主表信息2"
["times"] => "2012-02-03"
["状态1"]=>array{}
["状态2"]=>array{}
}
…………………………………………………………
我用leftjoin 查询的每个都是分开的记录。
建议还是先查询主表的记录后,遍历他们分别取得每种状态的记录,然后加入到记录中
$list=主表结果集;
foreach($list as $key=>$value)
{
$id=$value["id"];//主表id
$list1=根据主表id得到的状态1表结果集;
$list2=根据主表id得到的状态2表结果集;
$list[$key]["状态1"]=$list1;
$list[$key]["状态2"]=$list2;
}
我看 有人说 union可以,不知道语句该怎么写
from 状态1表 a, 主表 b
where a."主表.id"=b.id
union
select a."id","主表.id",title "状态" "a.times"
from 状态2表 a, 主表 b
where a."主表.id"=b.id想来,你应该不关心主表的times数据吧,另外使用union要求状态1表和2表的字段要由相同的数据类型
感谢,测试跑了一下,得到的数据结果都是平行的。应该是在总记录增加一个字段 “状态”,该状态内拥有所以级联查询数组。array{
[0] => { // 按照上述表中查出的结果
["id"] =>"1"
["title"] => "主表信息"
["times"] => "2012-02-02"
["状态1"]=>array{
[0]=>{
["id"] =>"1"
["title"] => "正常"
["times"] => "2012-02-02"
}
[1]=>{
["id"] =>"2"
["title"] => "正常"
["times"] => "2012-02-02"
}..............................是这样的数据结构
感谢,测试跑了一下,得到的数据结果都是平行的。应该是在总记录增加一个字段 “状态”,该状态内拥有所以级联查询数组。array{
[0] => { // 按照上述表中查出的结果
["id"] =>"1"
["title"] => "主表信息"
["times"] => "2012-02-02"
["状态1"]=>array{
--------------------[0]=>{
----------------------------["id"] =>"1"
----------------------------["title"] => "正常"
----------------------------["times"] => "2012-02-02"
----------------------------}
--------------------[1]=>{
----------------------------["id"] =>"2"
----------------------------["title"] => "正常"
----------------------------["times"] => "2012-02-02"
}..............................
union all
(select '状态1表' as `所属表`,`id`,状态 as `title`,`times` from 状态1表 where 主表.id in (select `id` from 主表))
union all
(select '状态2表' as `所属表`,`id`,状态 as `title`,`times` from 状态2表 where 主表.id in (select `id` from 主表))大致就是这样
其实union分解开来也就是查询三张表,只不过可以用一条语句完成就是了注意
查询得到的结果集,并不是你想要的结构,其中的“所属表”字段是告诉你当前记录的所属表
最后你就需要用复杂的遍历操作去过滤拼接整理来得到你想要的格式(这里就要用到“所属表”)
union all
(select '状态1表' as `所属表`,`id`,主表.id,状态 as `title`,`times` from 状态1表 where 主表.id in (select `id` from 主表))
union all
(select '状态2表' as `所属表`,`id`,主表.id,状态 as `title`,`times` from 状态2表 where 主表.id in (select `id` from 主表))漏了个字段(在遍历匹配时,这个字段也是必须)