以下の要求を簡略化して実行を高速化するには、いくつかの助けが必要です。ここで私がやろうとしているものです:テーブルの各行に対してSQLiteを実行すると、他の2つのテーブルでカウントがカウントされます
表プレーヤー(idPlayer、namePlayer) は、プレイヤーが殺されてしまったとき、各行はイベントを表し選手
表EventPVE(idPlayer) のリストが含まれていますプレイヤーは殺すか、他のプレイヤーによって殺されたときに、ゲーム環境
表EventPVP(idPlayerKilled、idPlayerKiller)によって は、各行がイベントを表し
私は各プレイヤーが環境によって殺された回数、プレイヤーによって何回殺されたのか、そして何人が他のプレイヤーを殺したのかを数えようとしています。以下のリクエストは機能しますが、非常に遅いです(もちろん3つのサブリクエスト)
簡略化してもらえますか?私は非常にSQLで悪い....私はLEFT JOINといくつかの "ソリューション"を見てきましたが、それは私の場合には動作しないようです。最初のLEFT JOINは正常に動作しますが、他のLEFT JOINは不良カウントを返します。ここで
SELECT p.idPlayer, p.namePlayer,
(
SELECT COUNT(*)
FROM EventPVE pve
WHERE pve.idPlayer = p.idPlayer
) AS pveDeath,
(
SELECT COUNT(*)
FROM EventPVP pvp
WHERE pvp.idPlayerKiller = p.idPlayer
) AS pvpKills,
(
SELECT COUNT(*)
FROM EventPVP pvp
WHERE pvp.idPlayerKilled = p.idPlayer
) AS pvpDeaths
FROM Player p
は、テストデシベルです:https://www.dropbox.com/s/tc7z1i26mumvhgm/test.db?dl=0
は 'Player'と' EventPVE'それぞれが左端の列は 'idPlayer'されている少なくとも1つのインデックスが定義されていませんが。 'EventPVP'は' idPlayerKiller'と 'idPlayerKilled'のそれぞれに対して少なくとも一つのそのようなインデックスを持っていますか? – eggyal
いいえ、EventPVEまたはEventPVPのいずれにもプライマリキーまたはインデックスがありません。しかし、Playerは主キーとしてidPlayerを持っています。 Playerテーブルに重複行はありません – vfloyd
私がデータベースを共有することができれば助かります。それはSQLiteのものです。 – vfloyd