おそらくLEFT JOINクエリとして、各ユーザーの上位3つの関心を取得しようとしています。
parent
アプリの設計方法では、各ユーザーはテーブルの「子」( のない行) に他ならない一連の興味を持っていcategories
ます。
以下は、モック データを使用した簡略化されたテーブル スキーマです ( SQL Fiddle のデモを参照) 。
-- Users table
| ID | NAME |
--------------
| 1 | John |
| 2 | Mary |
| 3 | Chris |
-- Categories table -- Interests table
| ID | NAME | PARENT | | ID | USER_ID | CATEGORY_ID |
-------------------------------------- ------------------------------
| 1 | Web Development | (null) | | 1 | 1 | 1 |
| 2 | Mobile Apps | (null) | | 2 | 1 | 1 |
| 3 | Software Development | (null) | | 3 | 1 | 1 |
| 4 | Marketing & Sales | (null) | | 4 | 2 | 1 |
| 5 | Web Apps | 1 | | 5 | 2 | 1 |
| 6 | CSS | 1 | | 6 | 3 | 1 |
| 7 | iOS | 2 | | 7 | 3 | 1 |
| 8 | Streaming Media | 3 | | 8 | 3 | 1 |
| 9 | SEO | 4 |
| 10 | SEM | 4 |
特定のユーザーの上位 3 つの関心を取得するために、通常は次のクエリを実行しました。
SELECT `c`.`parent` as `category_id`
FROM `interests` `i` LEFT JOIN `categories` `c` ON `c`.`id` = `i`.`category_id`
WHERE `i`.`user_id` = '2'
GROUP BY `c`.`parent`
ORDER BY count(`c`.`parent`) DESC LIMIT 3
このクエリは、categories
id = 2 のユーザーの上位 3 (親) を返します。
ユーザー テーブルにクエリを実行し、上位 3 つのカテゴリを 3 つの異なるフィールド (推奨) またはgroup_concat(..)
1 つのフィールドで取得する方法を知りたい
SELECT id, name, top_categories FROM users, (...) WHERE id IN ('1', '2', '3');
これを行うにはどうすればよいですか?ありがとう!