thinkphp 3.1.3版本,如何关联查询出一个字段中的多个值
thinkphp3.1.3版本,表A中有一个字段,该字段里存放的是许多个id值,值与值间用逗号分隔。(表B中存放这些id代表的汉字名称),在select出表A多条记录的情...
thinkphp 3.1.3版本,
表A中有一个字段,该字段里存放的是许多个id值,值与值间用逗号分隔。
(表B中存放这些id代表的汉字名称),在select出表A多条记录的情况下,如何循环出所有条目,并将每一条数据的该字段中的多个id值,通过关联表B查询,将这些id值转换成其所代表的汉字,显示在模板中 展开
表A中有一个字段,该字段里存放的是许多个id值,值与值间用逗号分隔。
(表B中存放这些id代表的汉字名称),在select出表A多条记录的情况下,如何循环出所有条目,并将每一条数据的该字段中的多个id值,通过关联表B查询,将这些id值转换成其所代表的汉字,显示在模板中 展开
1个回答
展开全部
亲,你的数据表是这么存的么?
A表
id tags(存放许多id值)
1 2,3,4,5
2 4,5
B表
tag name
1 小贵
2 小明
3 小红
4 小花
5 小刘
6 小猪
7 小马
8 小王
如果是这样,你可以这么查询
// 查出A表中的所有记录
$tableAList = M("A")->select();
$result = array(); // 用来存放所有记录
foreach($tableAList as $a){
$map['tag'] = array("IN",$a['tags']);
$tableBList = M("B")->where($map)->select();
$result = array_merge($result,$tableBList);
}
到这里$result 就是一个结果集了
我这个应该查询出来的是:
$result = array(
0=>array(
0=>array(tag=>2,name=>"小明"),
1=>array(tag=>3,name=>"小红"),
2=>array(tag=>4,name=>"小花"),
3=>array(tag=>5,name=>"小刘")
),
1=>array(
0=>array(tag=>4,name=>"小花"),
1=>array(tag=>5,name=>"小刘")
),
)
然后你可以对$result 进行遍历,然后组合成你想要的数据格式
希望对你有帮助!~~
A表
id tags(存放许多id值)
1 2,3,4,5
2 4,5
B表
tag name
1 小贵
2 小明
3 小红
4 小花
5 小刘
6 小猪
7 小马
8 小王
如果是这样,你可以这么查询
// 查出A表中的所有记录
$tableAList = M("A")->select();
$result = array(); // 用来存放所有记录
foreach($tableAList as $a){
$map['tag'] = array("IN",$a['tags']);
$tableBList = M("B")->where($map)->select();
$result = array_merge($result,$tableBList);
}
到这里$result 就是一个结果集了
我这个应该查询出来的是:
$result = array(
0=>array(
0=>array(tag=>2,name=>"小明"),
1=>array(tag=>3,name=>"小红"),
2=>array(tag=>4,name=>"小花"),
3=>array(tag=>5,name=>"小刘")
),
1=>array(
0=>array(tag=>4,name=>"小花"),
1=>array(tag=>5,name=>"小刘")
),
)
然后你可以对$result 进行遍历,然后组合成你想要的数据格式
希望对你有帮助!~~
追问
亲,您的回答对我有所启发!问题是A表还有其他字段,里面只是单一的汉字。当我想把A表select出的数组assign到模板中去一条条显示成表格。其中有一个列里面显示小明 小刘 小花等等,其他列正常显示。这个要如何写呢?
您的方法中如果只是简单两个字段,就没问题,主要是我的A表中还有其他字段。能继续帮我想想办法吗?
追答
嗯,那你可以这么做
比如:
A表
id tags(存放许多id值) age
1 2,3,4,5 11
2 4,5 21
B表不变
你该一下这里foreach
$tableAList = M("A")->select();
foreach($tableAList as $key=>$a){
$map['tag'] = array("IN",$a['tags']);
$tableBList = M("B")->where($map)->select();
$a['bcontent'] = $tableBList;
$tableAList[$key] = $a;
}
这样tableAList 中的每一个 A记录数组中都会多一个bcontent 字段 指向的是 B表中数据的数组!
然后你在根据这个去构建自己的数据结构,或者直接将tableAList assign 到前端,去进行输出!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询