gpt4 book ai didi

php - MySQL 查询 - 如何计算相关标签的数量

转载 作者:行者123 更新时间:2023-11-29 02:02:10 25 4
gpt4 key购买 nike

我正在努力寻找查询所需数据的好方法。我正在使用 MySQL 和 PHP。目前,我正在进行多个查询并使用一堆 for each 循环,但是,我仍然无法获得必要的输出。

这可能是一个棘手的问题,所以我感谢任何付出一些努力来解决这个问题的人!


我目前的表格如下:

topics_keywords (t_k_id, topic_id, keyword_id)
keywords (keyword_id, keyword)
topics (topic_id, subject, etc)

topics_keyword 将具有与同一 topic_id 关联的多个关键字。

keywords 只会为每个 keyword_id 定义一个关键字。

如果有人查询特定关键字(即体育),我想返回与 topic_id 相关的所有相关关键字的列表。

在下面的 SQL 中,您会看到主题 3 与 keyword_id 的 3(体育)和 4(棒球)相关联。但是,请注意,它还与 keyword_id 2(hello) 相关联。

我只需要计算“运动”与棒球相关联的次数。我说的很简单,但我想不出一个简单的方法来做到这一点。

根据以下数据,最终输出需要如下所示:

搜索词:“棒球”最终输出:

count  | keyword
----------------
sports | 2
hello | 1

这里有一些 mySQL 可以帮助处理数据:

CREATE TABLE IF NOT EXISTS `keywords` (
`keyword_id` int(11) NOT NULL AUTO_INCREMENT,
`keyword` varchar(64) NOT NULL,
PRIMARY KEY (`keyword_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

--
-- Dumping data for table `keywords`
--

INSERT INTO `keywords` (`keyword_id`, `keyword`) VALUES
(1, 'thebump'),
(2, 'hello'),
(3, 'baseball'),
(4, 'sports'),
(5, 'manga'),
(6, 'naruto'),
(7, 'one piece');

-- --------------------------------------------------------

--
-- Table structure for table `topics_keywords`
--

CREATE TABLE IF NOT EXISTS `topics_keywords` (
`t_k_id` int(11) NOT NULL AUTO_INCREMENT,
`topics_id` int(11) NOT NULL,
`keyword_id` int(11) NOT NULL,
PRIMARY KEY (`t_k_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

--
-- Dumping data for table `topics_keywords`
--

INSERT INTO `topics_keywords` (`t_k_id`, `topics_id`, `keyword_id`) VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 3, 4),
(5, 4, 3),
(6, 5, 3),
(7, 5, 4),
(8, 6, 3),
(9, 6, 4),
(10, 3, 2);

非常感谢!

最佳答案

试试这个:

SELECT keyword, 
Count(*)
FROM topics_keywords
INNER JOIN keywords
ON topics_keywords.keyword_id = keywords.keyword_id
INNER JOIN (SELECT k1.keyword_id AS keyword_id,
topics_keywords.topics_id
FROM keywords k1
INNER JOIN topics_keywords
ON topics_keywords.keyword_id = k1.keyword_id
WHERE keyword = 'baseball') AS temp
ON temp.keyword_id != keywords.keyword_id
AND temp.topics_id = topics_keywords.topics_id
GROUP BY keyword

SQLFiddle DEMO

编辑:你也可以试试这个:

SELECT keywords.keyword, 
Count(*)
FROM topics_keywords
INNER JOIN keywords
ON topics_keywords.keyword_id = keywords.keyword_id
INNER JOIN keywords k1
ON k1.keyword_id != keywords.keyword_id
INNER JOIN topics_keywords t1
ON t1.keyword_id = k1.keyword_id
AND t1.topics_id = topics_keywords.topics_id
WHERE k1.keyword = 'baseball'
GROUP BY keyword

SQLFiddle DEMO

我个人觉得第一个应该更快,但如果你能对它进行基准测试,发布结果会很好。

关于php - MySQL 查询 - 如何计算相关标签的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com