首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL外键选择匹配

MySQL外键选择匹配
EN

Stack Overflow用户
提问于 2016-12-25 19:05:12
回答 2查看 269关注 0票数 1

我有一个有文章的数据库。所有文章都有关键词。关键字位于单独的表中,关键字和项目与关系表相连接,因此:

文章

代码语言:javascript
运行
复制
CREATE TABLE `articles` (
  `id` int(11) NOT NULL,
  `articleTitle` varchar(50) NOT NULL,
  `articleBody` text NOT NULL,
  `articlePermalink` varchar(50) NOT NULL,
  `articleAuthor` int(11) NOT NULL,
  `createdAt` datetime DEFAULT CURRENT_TIMESTAMP,
  `updatedAt` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

关键词

代码语言:javascript
运行
复制
CREATE TABLE `keywords` (
  `id` int(11) NOT NULL,
  `keyword` varchar(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

articlekeywords

代码语言:javascript
运行
复制
CREATE TABLE `articlekeywords` (
  `id` int(11) NOT NULL,
  `articleId` int(11) NOT NULL,
  `keywordId` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我希望使用articles.id作为标识符,选择与任何给定文章具有部分或全部关键字的所有文章。最好有一个单一的SQL调用。

编辑:

最后,我做了一些非常类似于Gordon Linoff suggested below的事情。

代码语言:javascript
运行
复制
SELECT DISTINCT a.articleTitle, a.articlePermalink
FROM articles a
JOIN articlekeywords ak ON a.id = ak.articleId
JOIN articlekeywords ak2 ON ak.keywordId = ak2.keywordId AND ak2.articleId = $articleId AND not(a.id = $articleId)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-25 19:07:59

这是一个自我连接。您可以通过以下操作获得匹配的文章,这些文章按共同关键字的数量排序:

代码语言:javascript
运行
复制
select ak2.article2, count(*) as numKeywordsInCommon
from articlekeywords ak join
     articlekeywords ak2
     on ak.keywordid = ak2.keywordid and ak2.articleid = $arcticleid
group by ak2.articleid
order by numKeywordsInCommon desc;
票数 1
EN

Stack Overflow用户

发布于 2016-12-25 19:10:20

这将为您提供一个完整的列表,该列表由文章关键字表中的关系标识:

代码语言:javascript
运行
复制
SELECT * FROM articlekeywords AKW
JOIN articles A ON AKW.articleId = A.Id
JOIN keywords K ON AKW.keywordId = K.Id
-- WHERE (some condition you'd like to do for further filtering)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41323786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档