繁体   English   中英

有效的mySQL全文索引

[英]efficient mySQL fulltext index

我希望将游戏结果存储在表中。 每回合将由2-10名玩家参加。 每个玩家将获得1-5分。 我需要一种有效的方法来检索给定玩家/得分范围的所有回合。 例如:

select all rounds where Hamburger14 scored 5
select all rounds where Cheese3 scored 1
select all rounds where Hotdog99 scored 4

我的第一个想法是使用全文索引的varchar字段“ player_score”并按如下方式进行填充:

player1:0-player2:3-player3.1

然后,如果我希望玩家1得分为5的所有回合,我都会这样做:

select * from rounds where match(player_score) against("player1.5")

如果玩家池保持很小并且分数只有1-5,这似乎是可行的,尽管我可能需要弄乱默认的mySQL非索引字表或使用十六进制值作为分数等。

但是,关于此的某些事情看起来非常丑陋。 有什么建议么?

可选:如果将来如果我想检索给定玩家和SCORE RANGE的回合(例如,playerX得分为3或更高的所有回合),那么如何实现?

全文-不。

CREATE TABLE Rounds (
    round_num SMALLINT UNSIGNED NOT NULL,
    player VARCHAR(55) NOT NULL,
    score TINYINT UNSIGNED NOT NULL,
    PRIMARY KEY(round_num, player),
    INDEX(player, score)
);

然后做

SELECT * FROM Rounds
     WHERE player = "player1"
       AND score = 5;

要获取有关该回合的其余信息:

SELECT r.*
     FROM ( SELECT round_num FROM Rounds
               WHERE player = "player1"
                 AND score = 5 ) AS x
     JOIN Rounds AS r USING(round_num);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM