MySQLでのコラボレーションの検索

Rachie

私は人とプロジェクトのデータベースを持っています。特定の人と協力した人の名前と、プロジェクトの数を確認するにはどうすればよいですか?

たとえば、データベースからジミーの協力者を見つけたいと思います。

+----------+--------+
| project  | person |
+----------+--------+
| datamax  | Jimmy  |
| datamax  | Ashley |
| datamax  | Martin |
| cocoplus | Jimmy  |
| cocoplus | Ashley |
| glassbox | Jimmy  |
| glassbox | Martin |
| powerbin | Jimmy  |
| powerbin | Ashley |
+----------+--------+

結果は次のようになります。

Jimmy's collaborations:
+--------+----------------+
| person | collaborations |
+--------+----------------+
| Ashley | 3              |
| Martin | 2              |
+--------+----------------+
ルスラン・オスマノフ

テーブルをそれ自体と結合し、personフィールドでグループ化します。

SELECT u2.person, COUNT(u1.project) AS collaborations
FROM users u1
JOIN users u2 ON u2.project = u1.project
WHERE u1.person != u2.person AND u1.person = 'Jimmy'
GROUP BY u2.person;

クエリは、ジミーが参加したプロジェクトを選択しますu1からの行は、からの行u2によってフィルタリングされますu1両方のテーブルのユーザーが一致する重複エントリは、WHERE句でフィルタリングされます。最後に、結果セットはによってグループ化されpersonCOUNT関数はグループごとの行数を計算します。

パフォーマンス

ノートのインデックスperson及びproject列(または2つの別個のインデックス)が大幅に上記のクエリのパフォーマンスを向上させるであろう。特定のインデックス構成は、テーブル構造によって異なります。けれども、私は次のことが非常に十分だと思う2とテーブルのvarcharためのフィールドpersonproject、たとえば、:

ALTER TABLE users ADD INDEX `project` (`project`(10));
ALTER TABLE users ADD INDEX `person` (`person`(10));

正規化

ただし、個人とプロジェクトは、数値IDを使用して別々のテーブルに保存したいと思います。3番目のテーブルはコネクタの役割を果たすことができますperson_id - project_idつまり、正規化をお勧めします。正規化されたテーブルを使用すると、テキストフィールドの肥大化したインデックスを作成する必要はありません。

正規化されたテーブルは次のようになります。

CREATE TABLE users (
  id int unsigned NOT NULL AUTO_INCREMENT,
  name varchar(200) NOT NULL DEFAULT '',
  PRIMARY KEY(`id`),
  -- This index is needed, if you want to fetch users by names
  INDEX name (name(8))
);
CREATE TABLE projects (
  id int unsigned NOT NULL AUTO_INCREMENT,
  name varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY(`id`)
);
CREATE TABLE collaborations (
  project_id int unsigned NOT NULL DEFAULT 0,
  user_id int unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY(`project_id`, `user_id`)
);

正規化された構造のクエリは、もう少し複雑に見えます。

-- In practice, the user ID is retrieved from the calling process
-- (such as POST/GET HTTP requests, for instance).
SET @user_id := (SELECT id FROM users WHERE name LIKE 'Jimmy');

SELECT u.name person, COUNT(p.id) collaborations
FROM collaborations c
JOIN collaborations c2 USING(project_id)
JOIN users u ON u.id = c2.user_id
JOIN projects p ON p.id = c2.project_id
WHERE c.user_id = @user_id AND c.user_id != c2.user_id
GROUP BY c2.user_id;

ただし、高速であり、特に大規模なデータセットの場合、インデックスに必要なスペースは大幅に小さくなります。

元の答え

各人のプロジェクトの総数を取得するには、COUNT関数withGROUP BY句を使用します

SELECT person, COUNT(*) AS collaborations
FROM users
GROUP BY person;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

CloudFirestoreコレクションのパターンで検索

分類Dev

htaで複数のラジオボタンコレクションを検索する

分類Dev

バックボーンJSコレクションを使用して任意の順序で単語を検索

分類Dev

netsuiteでトランザクション検索の特定のレコードタイプを指定する方法...

分類Dev

複数のコレクションで検索マングース

分類Dev

コラボレーション図でのifelse条件の表現

分類Dev

FirebaseFirestoreのコレクションでフィールドを検索する

分類Dev

mongodbで複数のコレクションを検索する

分類Dev

mongodbで複数のコレクションを検索する

分類Dev

StackExchangeRedisコレクションでの検索

分類Dev

mongoosasticで複数のコレクションを検索する

分類Dev

コレクションビューの検索機能

分類Dev

Rおよびシーケンス検索でのマルコフ連鎖のシミュレーション

分類Dev

VisualStudioでのコラボレーション方法

分類Dev

JavaScriptコレクションで複数のフレーズ間の最初の出現を検索する方法は?

分類Dev

リレーションでのSQL検索

分類Dev

ページネーションでのPHPAjaxライブ検索

分類Dev

ブートストラップナビゲーションバーで検索ボックスを開くための検索ボタン

分類Dev

Javaコレクションで同じIDを持つすべての最新レコードを検索する

分類Dev

Web アプリケーションでのコントローラーの検索

分類Dev

非constポインターのコレクションでconstポインターを検索する方法は?

分類Dev

春データJPA - コレクション内のフィールドの名前で検索します

分類Dev

Eclipseでのリアルタイムのコラボレーション

分類Dev

コレクション内のカーソルの要素を検索

分類Dev

Python でコレクションの defaultdict タイプのバイナリ検索ツリーを実装する

分類Dev

新しいfilebeatモジュールでのコラボレーション

分類Dev

MongoDBのコレクションの再帰検索

分類Dev

PythonとC#のコレクションの検索

分類Dev

PythonとC#のコレクションの検索

Related 関連記事

  1. 1

    CloudFirestoreコレクションのパターンで検索

  2. 2

    htaで複数のラジオボタンコレクションを検索する

  3. 3

    バックボーンJSコレクションを使用して任意の順序で単語を検索

  4. 4

    netsuiteでトランザクション検索の特定のレコードタイプを指定する方法...

  5. 5

    複数のコレクションで検索マングース

  6. 6

    コラボレーション図でのifelse条件の表現

  7. 7

    FirebaseFirestoreのコレクションでフィールドを検索する

  8. 8

    mongodbで複数のコレクションを検索する

  9. 9

    mongodbで複数のコレクションを検索する

  10. 10

    StackExchangeRedisコレクションでの検索

  11. 11

    mongoosasticで複数のコレクションを検索する

  12. 12

    コレクションビューの検索機能

  13. 13

    Rおよびシーケンス検索でのマルコフ連鎖のシミュレーション

  14. 14

    VisualStudioでのコラボレーション方法

  15. 15

    JavaScriptコレクションで複数のフレーズ間の最初の出現を検索する方法は?

  16. 16

    リレーションでのSQL検索

  17. 17

    ページネーションでのPHPAjaxライブ検索

  18. 18

    ブートストラップナビゲーションバーで検索ボックスを開くための検索ボタン

  19. 19

    Javaコレクションで同じIDを持つすべての最新レコードを検索する

  20. 20

    Web アプリケーションでのコントローラーの検索

  21. 21

    非constポインターのコレクションでconstポインターを検索する方法は?

  22. 22

    春データJPA - コレクション内のフィールドの名前で検索します

  23. 23

    Eclipseでのリアルタイムのコラボレーション

  24. 24

    コレクション内のカーソルの要素を検索

  25. 25

    Python でコレクションの defaultdict タイプのバイナリ検索ツリーを実装する

  26. 26

    新しいfilebeatモジュールでのコラボレーション

  27. 27

    MongoDBのコレクションの再帰検索

  28. 28

    PythonとC#のコレクションの検索

  29. 29

    PythonとC#のコレクションの検索

ホットタグ

アーカイブ