假设我有一个标签系统,它将每篇文章的标签存储为整数列表。任何人都可以发布文章,这会导致标签变得极其困惑,例如标签可能是 x 和 y,但两者都表示 x。
我想要做的是创建两个表,一个带有 ID 和标签列 (Tags),另一个带有 Alias 和 Tag_ID 列 (Aliases),哪种类型的 SQL 查询最有效获取在搜索文章时可以作为别名引用的标签。
我能想到的最好方法是两个查询,第一个查询获取任何别名(然后使用代码检查 count == 1 是否),然后从标签表中获取最终标签。这是...
SELECT Tag_ID FROM Aliases WHERE Alias='UserInput';
#Perform check to see if there are 0 results
Select ID FROM Tags WHERE Tag='UserInput';
有没有办法做到这一点
SELECT Tags.Tag FROM Tags
INNER JOIN Aliases
ON Aliases.Tag_ID=Tags.ID
WHERE ...?
我不知道如何执行 SQL 语句的 WHERE 子句,如果它能按照我想要的方式工作...我能想到的最好的方法是使用 OR 子句并检查 Aliases.Alias 和 Tags。单独标记...
抱歉,如果这没有意义,这都是概念信息,我想在 SQL 方面得到正确的信息,以确保一旦我开始它就不会成为开发中的障碍...
编辑:
作为澄清,我正在尝试将“y”解析为“x”。因此,如果在 Aliases
表中,存在 CSharp 的 alias
,其 tag_id
为 1,并且在Tags
表中,有一个C#的tag
,其id
为>1,SQL 语句应该检索C#,无论是否存在别名,也与用于搜索的别名无关。
我希望能够在单个高效 SQL 语句中做到这一点。
最佳答案
我想这就是你想要的
select a.tag_id, Tags.tag
from tags
join aliases a on a.tag_id = tags.id
where tags.tag = a.alias
如果您想搜索包含该标签的别名,则可以使用 like
关键字:
select a.tag_id, Tags.tag
from tags
join aliases a on a.tag_id = tags.id
where tags.tag like '%' a.alias '%'
结论:不可能做你想做的事,因为你无法猜测标签和单词之间的链接是什么。但是,like
解决方案可能是您可以拥有的最接近的解决方案。
关于mysql - 标记别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28542388/