2016-11-01 2 views
0

私はこのテーブルをRunksと呼んでいます(Runkは基本的に私が作っているこのゲームの難題のようです)。不足しているものに基づいてMySQLデータベースに行を挿入する

すべてのゲームは4人のユーザーを収容できます。したがって、ラウンドごとに4つのランクが作成されます。 1ラウンドは24時間続く。

ラウンドの終わりに、これらのランクの状態が変化します。

しかし、私は問題に遭遇しています。その間に1人または複数のユーザーが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を作成し、次のクエリを生じるはずです。 1 Runk Runkは35 3 Runksがに取られる必要がある一つのことは、私は新しい必要があるという事実である。またgroup_idの44

のために作成する必要がありますgroup_idのために作成する必要がありgroup_idの32 1のために作成する必要がありますランクをまだアップロードしていないプレーヤーIDで作成されたランク。

その場合はグループ32プレイヤー1、2 & 3がすでにRunk ...プレーヤー4.

これは私のテーブルのように見えるものであるに属しているとニーズを作成する必要がありますRunkをアップロードしたため。答えの便宜上

enter image description here

+0

はTHERですeすべてのプレーヤー番号を一覧表示するテーブル?そのテーブル内にないすべてのプレーヤー番号を返すクエリの記述方法については、http://stackoverflow.com/questions/21633115/return-row-only-if-value-doesnt-exist?lq=1を参照してください。 'ランク'。 'INSERT'クエリでそれを使用して、欠落している行を追加することができます。 – Barmar

+0

はい、その情報をリストしたUsersテーブルがあります。偉大なリンクありがとう男私はそれを試してみましょう。 –

答えて

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 | 
+---------+-------------------+ 
関連する問題