0

我正在尝试在用户键入时实施主题标签建议,所以我正在构建一个这样的主题标签表:

CREATE TABLE IF NOT EXISTS `hashtags_weight` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hashtag` varchar(140) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
  `tot` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `hashtag` (`hashtag`,`tot`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1

我稍后会查询:

SELECT hashtag  FROM hashtags_weight WHERE hashtag LIKE 'foob%' ORDER BY tot DESC

我从中获取主题标签的来源来自先前插入的主题标签。现在,虽然这都是非常基本的东西,但我认为最好建议一个带有最常用案例的主题标签。假设我有一张桌子:

10 Foobar
5 FooBar
2 foobar

这意味着已经使用了 10 次 Foobar,5 次 FooBar 和 2 次 foobar。现在,我想将主题标签计为 17,并在自动完成期间仅建议 Foobar。

当然,我可以通过一些数组排序来做到这一点,但我已经看到这需要很多时间(有很多行)。我想听听一些不同的方法来解决这个问题。

ps这项工作将每晚运行,因此无需超快。我只是想确保我做得正确。当然,我可以向 Db 添加更多表,这没问题。

4

1 回答 1

0

更新您的查询:

SELECT count(*) as count,hashtag  FROM hashtags_weight WHERE hashtag LIKE 'foob%' GROUP BY hashtag ORDER BY tot DESC

添加计数和分组依据,它应该可以工作,因为您的表格已经不区分大小写。

不知道你是如何到达已经购买的 10,5 和 2 我假设你是用 PHP 做到的

编辑:

我看到你用'tot'。这算不算总数?在这种情况下:

SELECT hashtag,sum(tot) as total FROM hashtags_weight WHERE hashtag LIKE 'foob%' GROUP BY hashtag ORDER BY tot DESC
于 2012-08-16T08:55:48.257 回答