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选择您真正使用的数据库。完成。问题本身很简单,我只是添加了一些解释,以澄清我的意图,而不是问题过于宽泛。没有人知道你的机器有多快。