情景是:我的文章表(news)中有一个flag字段,它的类型是set集合,可能的值是一些字母,如"a,p,d",这些字母对应着一个diyflag表,表中有这些字母对应的中文名称,两个表如下:
文章表news(其中flag字段为set集合类型)
id | title | flag |
---|---|---|
1 | 标题1 | a,b,c |
2 | 标题2 | a,b |
3 | 标题3 | b,c |
属性表diyflag
id | flag_value | flag_name |
---|---|---|
1 | a | 头条 |
2 | b | 精选 |
3 | c | 推荐 |
表结构如上图了,我现在想要的结果是,查询的结果,直接显示flag字段为对应的中文名(如头条,精选),而不是a,b之类的字母。
请教各位兄弟了,多谢指点!
这个怎么说呢,不建议在sql语句中进行运算(关键是一条sql如何取出你想要的结果我还真不知道...)
我有个折中的思路,你参考一下:
$news_list;
array_column
取出$news_list的flag形成一个$flag_list
集合;array_merge($new_flag_list, explode(',', $flags))
一下形成一个新的new_flag_list,这个new_flag_list里面的flag值都是单独的array_unique($new_flag_list)
去重,并根据去重后的结果用flag_value in (new_flag_list)
查询diyflag表里的数据,形成flag_value => $flag_name
键值对$new_list
,替换abc