mysql - 标记别名

标签 mysql sql

假设我有一个标签系统,它将每篇文章的标签存储为整数列表。任何人都可以发布文章,这会导致标签变得极其困惑,例如标签可能是 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 表中,存在 CSharpalias,其 tag_id1,并且在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/

相关文章:

mysql - mysql中如何比较2个表

php - 按具有相似信息的 2 列分组以链接到第二个表

在 SELECT 中使用时 CASE 'NOT NULL' 的 mysql 语法

mysql - 在特定列上应用自动增量 1 时出错

java - jOOQ - MySQL 多行插入...使用 VALUES() 函数进行重复键更新

php - 只需使用地址工具栏 php get 方法

Mysql - 重用计算值

java - 如何在 JDBC 中获取插入 ID?

sql - 在稀疏表中选择一行第一个非空值

python - 统计间隔内的寄存器数量