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

これは、Foobar が 10 回、FooBar が 5 回、Foobar が 2 回使用されたことを意味します。ここで、ハッシュタグを 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

countとgroupbyを追加すると、テーブルで大文字と小文字が区別されないため、機能するはずです。

どうやって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 に答える