【问题标题】:mySQL Count rows for each ID in a tablemySQL 计算表中每个 ID 的行数
【发布时间】:2011-07-16 11:18:54
【问题描述】:

数据库架构

----------------------------------------------------------
| id | killed | killed_by | killed_uuid | killed_by_uuid |
----------------------------------------------------------

killedkilled_by 保存实体类型。例如。 “玩家”、“环境”、“生物”。没有具体细节。

killed_uuidkilled_by_uuid 是玩家参与杀戮时的用户 ID。

此表包含在我的游戏服务器上发生的杀戮。每次击杀都存储在单独的行中,因此没有每个玩家的总数。

我想为每个用户 ID 创建总数并从中创建一个排行榜。所以基本上,计算每个单独的 UserID 的行数。

我尝试过使用

select killed_by_uuid, count(id)
from kills
where killed='999' AND killed_by='999'
group by killed_by_uuid
order by count(id) desc

999 是属于玩家实体 kill 而不是实际 USERID 的 ID。但我得到的只是一个结果集:

Array
(
    [0] => c676680f-98cb-4893-b1ba-ab5ab59fc272
    [killed_by_uuid] => c676680f-98cb-4893-b1ba-ab5ab59fc272
    [1] => 15
    [count(id)] => 15
)

【问题讨论】:

    标签: mysql select sum multiple-select


    【解决方案1】:
    select killer, count(killer) as total_kills
    from kills
    where killed='player' and killed_by not in (<list of environment ids>)
    group by killer
    order by total_kills desc, killer
    

    【讨论】:

    • 为我的密集度欢呼。我应该获取数组,它只是逐行存储。你的回答完全正确。干杯。
    【解决方案2】:
    SELECT COUNT(*) FROM KILLS WHERE KILLED=? AND KILLED_BY NOT IN (?, ?, ?, ?, ?, ...)
    

    【讨论】:

    • 您可能还想在KILLED 列上添加索引。
    • 不会只计算一个用户吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多