根据缺少的内容将行插入MySQL数据库

时间:2016-11-01 10:56:24

标签: mysql

我这张名为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

输出这个:

enter image description here

这应该导致下一个查询创建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.

这就是我的表格:

enter image description here

1 个答案:

答案 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 |
+---------+-------------------+