很常见的用例: 我有一张存放文章的表, tag 字段是逗号分隔的数字,在显示列表的时候我想一次性查询出 tag 的字符串
SELECT
tt.*,u.name,(SELECT group_concat(title) FROM tag WHERE id IN (tt.tag)) as tag
FROM content tt
LEFT JOIN user u ON tt.owner=u.id
ORDER BY ts_created DESC
这句话查出来 tag 每次都是只有一个,原因主要是 IN 语句中放了一个字符串,而不是数字,本来应该是IN(97,92)
,但这样执行实际上代表了IN('97,92')
,请高手帮忙解答一下怎样才能让它变成一串数字用逗号分隔,我知道这样不符合范式什么鬼的,但我这个东西涉及的数据量很小。
昨晚睡觉前还没想到,稀里糊涂的,早上醒来突然想起来之前用过一个FIND_IN_SET,问题顺利解决
SELECT
tt.*,u.name,(SELECT group_concat(title) FROM tag WHERE FIND_IN_SET(id,tt.tag)) as tag
FROM content tt
LEFT JOIN user u ON tt.owner=u.id
ORDER BY ts_created DESC
改成这样就可以了。
这个函数的功能是寻找一个字符串是否在另外一个以逗号分割的字符串中存在。
1
b821025551b 2016-11-07 00:12:23 +08:00
写个分割函数。
|
2
SoloCompany 2016-11-07 01:11:06 +08:00
不在乎性能就是 concat(‘,’,id,’,’) like concat(‘%,’,tt.tag,’,%’)
|
3
liujin834 OP @SoloCompany FIND_IN_SET 就解决了哈哈哈
|