mysql字符串拼接无法全部读取?

要读取某栏目(catalog)及其子栏目(可能有也可能没有)下的所有文章(article),article表有字段catalog_id,用拼接字符串的形式,发现只会读取到catalog_id为10的所有文章

select * from article  where article.catalog_id IN (
    select CONCAT_WS(',',10,GROUP_CONCAT(id))  from catalog where catalog.top_id=10
);

请问我哪里写错了?

阅读 1.8k
1 个回答

如果catalog 里有id=1,2,3,4的, GROUP_CONCAT(id)返回 '1,2,3,4',
CONCAT_WS(',',10,GROUP_CONCAT(id))将返回 '10,1,2,3,4',注意这里都是带引号的,意味着这是字符串

相当于是

select * from article  where article.catalog_id IN (
    '10,1,2,3,4'
);

显示这里引号起了副作用

改成这个试试?

select * from article  where article.catalog_id IN (
select 10 union
select id from catalog where catalog.top_id=10
);

因为不是很清楚你的表结构和数据, 也许这并不是你想要的 ;)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题