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

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

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

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

377閲覧

Slackで特定のチームのチャンネルを特定できる情報は何でしょうか。

mystasly48

総合スコア25

SQL

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2018/06/15 03:00

Slackで言葉遊びをするBOTを作っていて、前の言葉を記録しておくためにチームとチャンネルを特定して情報を保持しておきたいと思っているのですが、何の情報をキーにしたら良いのでしょうか。
TeamId, ChannelId, ServiceId あたりが関係しているのかなと思うのですが、いくつかチームがある中で、別のチームで同じChannelIdが使われていそうで、これだけで判断するのは良くないかなと思っています。ServiceIdがどのような情報なのか軽く調べたところでは見当たらず分かりませんでした。
TeamId と ChannelId を結合して保存しようとも思ったのですが、最悪の場合として TeamId: "ABCD", ChannelId: "EFG"TeamId: "ABC", ChannelId: "DEFG" というケースがありえるのではと思いまして。
TeamId と ChannelId の両方を保持して判定するしかないのでしょうか・・・?
同じチーム内でも2つ以上のチャンネルで別のゲームが行われることも想定して、チームごとでの判定はしたくありません。
このような情報を必要としてるサービスはかなりあると思うのですが、どのように判定しているのでしょうか?
ちなみに、Outgoing Webhooks と Azure Functions を使っていて、SQL Database に保存する予定です。そしてデータベースは完全初心者です・・・。

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

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

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

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

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

guest

回答1

0

ベストアンサー

TeamId と ChannelId を結合して保存しようとも思ったのですが、最悪の場合として TeamId: "ABCD", ChannelId: "EFG" と TeamId: "ABC", ChannelId: "DEFG" というケースがありえるのではと思いまして。

「とにかくTeamIdとChannelIdをまとめて管理したい!」ということであれば、TeamIdとChannelIdで絶対使用されない文字列で連結してはいかがでしょう?

例えば、 | という文字列がTeamIdとChannelIdで絶対に使用されない文字列だと仮定して、

・TeamId: "ABCD", ChannelId: "EFG" は "ABCD|EFG"
・TeamId: "ABC", ChannelId: "DEFG" は "ABC|DEFG"

となりますので、重複は発生しません。

TeamId と ChannelId の両方を保持して判定するしかないのでしょうか・・・?

両方を保持して判定したくない理由が不明なので、なんとも言えませんが……。

一般的に「複数の項目(今回ならTeamIdとChannelId)でデータを特定する」場合、DB上にTeamIdとChannelIdを別項目として登録するかと思います。

そして、「特定のチーム&チャネルのデータだけを取得したい」となったら、SQLでデータを取得する際にWHERE句に条件を追加します。

例: word_game テーブルのデータが id team_id channel_id word_text created_at -- ------- ---------- ---------------------------- ---------------- 1 ABC DEFG たけやぶやけた 2018-06-15 12:00 2 ABCD EFG ねこがねこんだ 2018-06-15 12:01 3 ABC DEFG しんぶんし  2018-06-15 12:02 4 ABC DEFG わたしまけましたわ 2018-06-15 12:03 5 ABCD EFG あるみかんのうえにあるみかん 2018-06-15 12:04 となっている場合、 -- word_game テーブルから ABCチームのDEFGチャネルのデータを全て取得したい時に発行するSQL SELECT * FROM word_game WHERE team_id = 'ABC' AND channel_id = 'DEFG'; -- word_game テーブルから ABCDチームのEFGチャネルのデータのうち、最新のものだけを取得したい時に発行するSQL -- ※created_atの降順に並べ替えて(ORDER BY created_at DESC)、最初の1件だけ取得します(LIMIT 1) SELECT * FROM word_game WHERE team_id = 'ABCD' AND channel_id = 'EFG' ORDER BY created_at DESC LIMIT 1;

投稿2018/06/15 03:40

nak

総合スコア696

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

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

mystasly48

2018/06/16 03:01

1つに決めて主キーにするのが良いのかなと思っていたので、検索で2件を対象にすることは考えていませんでした…。 実際に抽出のコードも書いていただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問