私はクローン化された結果に
私のテーブルを避けるために、私のデータベースの構造を改善しようとしている1つのデータベースに座っていると、次のようになります。複数のテーブルの処理結果 - より高速な方法がありますか?
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
Here are some sample results
(そこに言葉の一部で怖がってはいけない - 私はポーランド出身来る必要とするものが翻訳しbeedしており、
マップが変更されるたびに、各プレーヤーはこのデータを受信する必要があります+地図全体に新しいデータが存在する可能性があります。
ご覧のとおり、INNER JOIN性質のためにフィールドコピーがあります。幸いなことに、私はクラスの数を知っているので、私は結果を処理することができるので、[行%number_of_classes]行と[行< number_of_classes]行のクラスから機器を取得します。しかし、私はそれがより良くできると思う。私はそれぞれのクエリから別々に結果を得ることを考えていましたが、クエリの数は3倍になります。たぶん、私はSQL構造全体を再構築する必要がありますか?それともこれが最善の方法でしょうか?
(1)あなたの質問はあまりにも複雑です。 (2)あなたのコードを読むことができません。 (3)実際に使用しているデータベースを選択します。 –
完了。質問自体はかなりシンプルですが、私は自分の意図が明確であることを明確にするために説明を追加しました – MAGNET
質問よりも多くを求めることは広すぎるでしょう。 (そしてあなたのマシンがどれくらい速いかは誰にも知られていません。) –