标记别名

时间:2015-02-16 13:21:51

标签: mysql sql

让我们说我有一个标记系统,它将每篇文章的标记存储为整数列表。任何人都可以发布文章,这会导致标签变得格外混乱,例如标签可能是x和y,但两者都是x。

我想要做的是创建两个表,一个具有ID和Tag列(标签),另一个具有Alias和Tag_ID列(别名),哪种类型的SQL查询最有效地工作在搜索文章时,获取可以作为别名引用的标记。

我能想到的最好的是两个查询,第一个获取任何别名(然后使用代码检查count == 1),然后从Tags表中获取最终标记。哪个是......

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端获得正确,以确保它不会成为开发中的障碍我开始......

修改 作为澄清,我试图解决&#34; y&#34;到&#34; x&#34;。因此,如果在Aliases表格中,{em>一个 CSharp alias,其中<{1>} 1 ,并且tag_id 1}}表, C# Tags,其中<{1>} 1 ,SQL语句应检索 C#,与是否存在或不是用于搜索的别名无关。

我希望能够在Single Efficient SQL语句中执行此操作。

1 个答案:

答案 0 :(得分:0)

我认为这就是你想要的

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解决方案可能是您可以提供的最接近的解决方案。