Sqlite 处理多个表的结果-有没有更快的方法?
我只是试图改进我的数据库结构,以避免得到克隆的结果 我的表位于一个数据库中,如下所示:Sqlite 处理多个表的结果-有没有更快的方法?,sqlite,caching,Sqlite,Caching,我只是试图改进我的数据库结构,以避免得到克隆的结果 我的表位于一个数据库中,如下所示: CREATE TABLE IF NOT EXISTS `Players`( `ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `UserID` INTEGER NOT NULL UNIQUE, `SteamID` TEXT NOT NULL UNIQUE, `Nick` TEXT NOT NULL,
CREATE TABLE IF NOT EXISTS `Players`(
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`UserID` INTEGER NOT NULL UNIQUE,
`SteamID` TEXT NOT NULL UNIQUE,
`Nick` TEXT NOT NULL,
`KlanID` INTEGER NOT NULL,
`Money` INTEGER NOT NULL,
`Kills` INTEGER NOT NULL,
`Deaths` INTEGER NOT NULL,
`Score` INTEGER NOT NULL,
`PayOrNot` INTEGER NOT NULL,
`IsNewOne` INTEGER NOT NULL,
`HUDMode` INTEGER NOT NULL,
`HUDColors` INTEGER NOT NULL,
`HUDPoz1` INTEGER NOT NULL,
`HUDPoz2` INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS `Classes` (
`ClassID` INTEGER NOT NULL PRIMARY KEY UNIQUE,
`UserID` INTEGER NOT NULL,
`Level` INTEGER NOT NULL,
`Health` INTEGER NOT NULL,
`Intelligence` INTEGER NOT NULL,
`Stamina` INTEGER NOT NULL,
`Durability` INTEGER NOT NULL
);
CREATE TABLE `Equipment` (
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`UserID` INTEGER NOT NULL,
`Name` TEXT NOT NULL,
`Type` INTEGER NOT NULL,
`Time` INTEGER NOT NULL,
`NumberOfUses` INTEGER NOT NULL
);
SELECT DISTINCT Players.SteamID,Players.Nick,Players.KlanID,Players.Money,Players.Kills,Players.Deaths,Players.Score,Players.PayOrNot,Players.IsNew,Players.HUDMode,Players.HUDColors,Players.HUDPoz1,Players.HUDPoz2,
Classes.Name,Classes.Level,Classes.Health,Classes.Intelligence,Classes.Stamina,Classes.Durability,
Equipment.Name,Equipment.Type,Equipment.Time,Equipment.NumberOfUses
FROM Players
INNER JOIN Equipment ON Players.UserID = Equipment.UserID
INNER JOIN Classes ON Equipment.UserID = Classes.UserID
WHERE Players.UserID=%d
这是一个专为反恐服务器设计的插件。它介绍了一些额外的功能,如选择自己的类,接收设备,提供额外的权力,水准系统等。我需要得到几乎所有的数据存储在那里。问题是,每个玩家的装备数量不得而知。因此,我必须想办法尽可能地获得这些信息
目前,我的查询如下所示:
CREATE TABLE IF NOT EXISTS `Players`(
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`UserID` INTEGER NOT NULL UNIQUE,
`SteamID` TEXT NOT NULL UNIQUE,
`Nick` TEXT NOT NULL,
`KlanID` INTEGER NOT NULL,
`Money` INTEGER NOT NULL,
`Kills` INTEGER NOT NULL,
`Deaths` INTEGER NOT NULL,
`Score` INTEGER NOT NULL,
`PayOrNot` INTEGER NOT NULL,
`IsNewOne` INTEGER NOT NULL,
`HUDMode` INTEGER NOT NULL,
`HUDColors` INTEGER NOT NULL,
`HUDPoz1` INTEGER NOT NULL,
`HUDPoz2` INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS `Classes` (
`ClassID` INTEGER NOT NULL PRIMARY KEY UNIQUE,
`UserID` INTEGER NOT NULL,
`Level` INTEGER NOT NULL,
`Health` INTEGER NOT NULL,
`Intelligence` INTEGER NOT NULL,
`Stamina` INTEGER NOT NULL,
`Durability` INTEGER NOT NULL
);
CREATE TABLE `Equipment` (
`ID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`UserID` INTEGER NOT NULL,
`Name` TEXT NOT NULL,
`Type` INTEGER NOT NULL,
`Time` INTEGER NOT NULL,
`NumberOfUses` INTEGER NOT NULL
);
SELECT DISTINCT Players.SteamID,Players.Nick,Players.KlanID,Players.Money,Players.Kills,Players.Deaths,Players.Score,Players.PayOrNot,Players.IsNew,Players.HUDMode,Players.HUDColors,Players.HUDPoz1,Players.HUDPoz2,
Classes.Name,Classes.Level,Classes.Health,Classes.Intelligence,Classes.Stamina,Classes.Durability,
Equipment.Name,Equipment.Type,Equipment.Time,Equipment.NumberOfUses
FROM Players
INNER JOIN Equipment ON Players.UserID = Equipment.UserID
INNER JOIN Classes ON Equipment.UserID = Classes.UserID
WHERE Players.UserID=%d
别被那些话吓着了——我来自波兰。所需要的东西已经被翻译和强调了
每次地图更改时,每个玩家都必须接收这些数据+地图上可能会有一些新的数据。
如您所见,由于内部联接的性质,存在一些字段副本。幸运的是,我能够处理结果,因为我知道类的数量,所以我从[row%number\u of_classes]行和[row
但是没有理由使用单个查询。SQLite没有客户端/服务器通信开销,因此。1您的问题太复杂了。2您的代码无法读取。3选择您真正使用的数据库。完成。问题本身很简单,我只是添加了一些解释,以澄清我的意图,而不是问题过于宽泛。没有人知道你的机器有多快。