質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

1820閲覧

ガチャの結果を検索したい

aglkjggg

総合スコア769

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2015/12/23 06:54

編集2015/12/23 07:00

1. 背景

趣味で自作しているゲームに最近リセマラが流行りのようですのでその要素を取り入れました。 そこで、ユーザーがどこまでリセマラをやるのか統計的なものがみれればなぁと思い、 毎回集計SQLを手書きするのはしんどいので、 WEBの画面に検索ボックスを1つ置いてリセマラ結果を検索させるような画面を考えていました。 ※Googleのように一行の検索ボックスと検索ボタン1個のようなイメージです。 例えば、「ぴかぴかの剣 ぼろぼろの服」で検索すると、 その2つのアイテムが出た`user_id`一覧を出力するようなものを想定しています。

2. 現在の仕様

・ガチャの結果が入ったテーブルをgachaとして作成しています。
・ガチャは1つアカウントにつき3回ひける設定です。
(今後増えるかもしれません)
・出てくるアイテムは(ぼろぼろ | ふつう | ぴかぴか)の(剣 | 服)の合計6種類としています。
(今後増えるかもしれません)

3. 質問

「ぴかぴかの剣」と「ぴかぴかの服」が出たものは
以下のSQLを元にして実装したWEB側のシステムで検索できたのですが、
http://sqlfiddle.com/#!9/b9648/2/0

同じアイテムが出てきた場合の検索ができませんでした。
http://sqlfiddle.com/#!9/b9648/1/0

どのようにすれば同じ名前の結果を検索することができますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

種類数とレコード数の両方を評価するように変更してみてはいかがでしょうか?

SQL

1SELECT user_id 2FROM gacha 3WHERE name IN ('ぴかぴかの剣', 'ぴかぴかの剣') 4GROUP BY user_id 5HAVING COUNT(DISTINCT name) = 1 AND COUNT(*) =2;

※「COUNT(DISTINCT name) = 1」この部分は種類数を、「COUNT(*) =2」この部分は合計数をそれぞれプログラムで動的に設定する必要があります。

SQL

1SELECT user_id 2FROM gacha 3WHERE name IN ('ぴかぴかの剣', 'ぴかぴかの服') 4GROUP BY user_id 5HAVING COUNT(DISTINCT name) = 2 AND COUNT(*) =2;

--大幅に勘違いしていたので書き直しました。

投稿2015/12/23 11:57

編集2015/12/23 12:33
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirohiro

2015/12/23 12:44 編集

「'ぴかぴかの剣', 'ぴかぴかの剣'」で3つ 'ぴかぴかの剣'を取得したユーザも対象にするなら、HAVING COUNT(DISTINCT name) = 1 AND COUNT(*) >=2;
aglkjggg

2015/12/23 15:46

ありがとうございます、まさに私のやりたいことでした! 種類の数と合計の数をHAVINGでANDで結ぶことは思いつきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問