我有一个表,其中包含我们知识库中的知识文章信息。
为了简单起见,它包含以下列:
articleID, title, knowledge_base, state, article_content
状态是文章的工作流状态,我只关心发布的版本,文章内容是文章的html。
我们正在删除knowledge_base2,但knowledge_base1中有一些文章链接到这些文章,我需要找到并删除这些链接。
链接包含文章的articleID,所以我认为这会很容易。
我想在article_content列中搜索对knowledge_base2的articleID的任何引用。我用了这个代码:
/* Any knowledge_base1 articles that link to an article in knowledge_base2. */
Select a.articleID, a.title
FROM table1 a
Join (SELECT articleID
From table1 b
Where state = 'Published'
AND knowledge_base LIKE 'Knowledge_base2') b
ON a.articleID = b.articleID
WHERE a.knowledge_base = 'Knowledge_base1'
AND a.state = 'Published'
AND a.`article_content` LIKE concat('%',b.articleID,'%')
ORDER BY a.articleID
当我运行这个时,我没有得到任何结果,但没有错误。我知道Knowledge_base1中有一些链接引用了Knowledge_base 2中的文章ID,所以应该会有很多结果。我想这句话就是我错的地方:;与a.article_content
LIKE concat('%',b.number,'%'("有更好的写法吗?注意,我对此数据库具有只读权限,不能使用本地临时表。
表中的数据示例如下:
| articleID | title | knowledge_base | state | article_content |
+-----------+------------------------+-----------------+-----------+-------------
| KB0001 | How to fix a widget | knowledge_base1 | Published | http://sp?id=kb_article_view&sysparm_article=KB0002 |
| KB0002 | How to make a sandwich | knowledge_base2 | Published | Random HTML content |
| KB0003 | How to buy a car | knowledge_base1 | outdated | http://sp?id=kb_article_view&sysparm_article=KB0004 |
| KB0004 | House FAQs | knowledge_base2 | Published | Random HTML content |
+-----------+------------------------+-----------------+-----------+-------------
最后评论:经过更多的研究和测试,我发现这似乎给了我所需要的答案:
Select a.articleID, a.title
FROM table1 a
Join (SELECT articleID
From table1 b
WHERE knowledge_base LIKE 'Knowledge_base2') b
ON a.article_content LIKE concat('%',b.articleID,'%')
WHERE a.knowledge_base = 'Knowledge_base1'
AND a.state = 'Published'
ORDER BY a.articleID