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值转换成其所代表的汉字,显示在模板中
展开
 我来答
大大大大流氓兔
2016-08-19 · TA获得超过302个赞
知道小有建树答主
回答量:189
采纳率:96%
帮助的人:121万
展开全部
亲,你的数据表是这么存的么?
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 到前端,去进行输出!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式