Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLITE对于表的每一行,统计其他两个表中的发生次数_Sqlite - Fatal编程技术网

SQLITE对于表的每一行,统计其他两个表中的发生次数

SQLITE对于表的每一行,统计其他两个表中的发生次数,sqlite,Sqlite,我需要一些帮助来简化下面的请求,并加快执行速度。以下是我想做的: 桌面播放器idPlayer,namePlayer 包含玩家列表 表EventPVE idPlayer 每一行代表一个玩家被游戏环境杀死的事件 表EventPVP idPlayerKilled,idPlayerKiller 每行代表一名玩家杀死或被另一名玩家杀死的事件 我试着,对每个玩家来说,计算他们被环境杀死的次数,他们被一个玩家杀死的次数,以及他们杀死另一个玩家的次数。下面的请求可以工作,但速度非常慢,当然是3个子请求 你能帮我

我需要一些帮助来简化下面的请求,并加快执行速度。以下是我想做的:

桌面播放器idPlayer,namePlayer 包含玩家列表

表EventPVE idPlayer 每一行代表一个玩家被游戏环境杀死的事件

表EventPVP idPlayerKilled,idPlayerKiller 每行代表一名玩家杀死或被另一名玩家杀死的事件

我试着,对每个玩家来说,计算他们被环境杀死的次数,他们被一个玩家杀死的次数,以及他们杀死另一个玩家的次数。下面的请求可以工作,但速度非常慢,当然是3个子请求

你能帮我简化一下吗?我的sql很差。。。。我见过一些使用左连接的解决方案,但在我的情况下似乎不起作用。第一个左联接工作正常,但其他联接返回的计数不正确

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

这里有一个测试数据库:

我认为不需要第二个表EventPVE

试试这个: 从eventpvp中选择*左键在eventpvp上加入玩家。IdLayerKilled=player.IdLayerKilled按IdLayerKilled分组


它对我有用。我没有使用您提供的数据库,而是创建了一个。

查询本身已经尽可能简单了

问题是数据库必须扫描所有表以查找具有匹配的玩家ID值的行,并且必须为每个玩家执行一次

可以使用一些索引加快这些查找:

CREATE INDEX ep ON EventPVE(idPlayer);
CREATE INDEX pkiller ON EventPVP(idPlayerKiller);
CREATE INDEX pkilled ON EventPVP(idPlayerKilled);

Player和EventPVE是否都至少定义了一个索引,其中最左边的列是idplyer;EventPVP是否为idPlayerKiller和idPlayerKilled中的每一个都至少有一个这样的索引?否,EventPVE或EventPVP中没有主键或索引。不过,玩家有idPlayer作为主键。播放器表中没有重复的行,如果它有助于我共享数据库。这是一个SQLITE问题。如果它是SQLITE,为什么你要标记这个问题而不是??!这里有一个到测试数据库的链接:我不是SQLITE的专家,但是在请求中没有计数的情况下,这怎么可能工作,所以我尝试显示3个计数器:p查询的返回必须是:idPlayer | namePlayer | pveDeathCount | pvpdeathcount |pvpKillsCount@vfloyd请检查随附的图片3个计数器是什么意思我不明白。你能详细说明一下吗?好的,基本上我想计算每个玩家在表EventPVE中被idPlayer字段指向的次数,每个玩家在表EventPVP中被idPlayerKilled字段指向的次数,每个玩家在表EventPVP中被idPlayerKiller字段指向的次数。