我这张名为Runks的桌子(Runk基本上就像我正在制作的游戏中的挑战)。
每个游戏可以容纳4个用户。因此,每轮将创建4个Runks。 1轮将持续24小时。
在回合结束时,这些Runks的状态发生了变化。
但是我遇到了问题。如果一个或多个用户在此期间忽略了上传Runk,我需要在数据库中为他们创建一个空的Runk。
此查询:
SELECT runk_group_id, COUNT(runk_id)
FROM runks
WHERE runk_status = 'ACTIVE'
GROUP BY runk_group_id
输出这个:
这应该导致下一个查询创建5个Runks。 需要为group_id 32创建1个Runk 需要为group_id 35创建Runk 需要为group_id 44
创建3个Runks还需要考虑的一件事是,我需要使用尚未上传Runk的播放器ID创建新的Runks。
所以如果对于32组球员1,2和2 3已经上传了一个Runk ...需要创建的Runk需要属于玩家4.
这就是我的表格:
答案 0 :(得分:0)
为了回答,这是一个简化的例子(为可怕的命名道歉......):
CREATE TABLE users (
user_id int,
);
INSERT INTO users (1), (2), (3);
CREATE TABLE users_list (
user_id int
);
INSERT INTO users_list values (1), (1), (1), (3);
-- SELECT as shown
SELECT user_id, count(user_id)
FROM users_list
GROUP BY user_id;
+---------+----------------+
| user_id | count(user_id) |
+---------+----------------+
| 1 | 3 |
| 3 | 1 |
+---------+----------------+
-- Incorrect, count includes all an entry even if the left join has nulls
SELECT u.user_id, count(u.user_id)
FROM users u
LEFT JOIN users_list ul ON u.user_id = ul.user_id
GROUP BY u.user_id;
# Gives - WRONG
+---------+------------------+
| user_id | count(u.user_id) |
+---------+------------------+
| 1 | 3 |
| 2 | 1 |
| 3 | 1 |
+---------+------------------+
-- Doesn't include the nulls in the count so we ge the correct answer
SELECT u.user_id, count(ul.user_id)
FROM users u
LEFT JOIN users_list ul ON u.user_id = ul.user_id
GROUP BY u.user_id;
+---------+-------------------+
| user_id | count(ul.user_id) |
+---------+-------------------+
| 2 | 0 |
| 1 | 3 |
| 3 | 1 |
+---------+-------------------+