構文:
GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer |col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val])
まず、学生コース選択テーブル Student_courses を作成し、テスト データを入力します。
SQL コード
コードをコピー コードは次のとおりです。
CREATE TABLEstudent_courses (
Student_id INT UNSIGNED NOT NULL、
course_id INT UNSIGNED NOT NULL、
KEY(student_id)
);
Student_courses の値に挿入 (1, 1), (1, 2), (2, 3) ), ( 2, 4), (2, 5);
コードをコピーします コードは次のとおりです:
mysql> SELECT Student_id, course_id FROM Student_courses WHERE Student_id=2; -- ---------- ----------------
| コース ID | - ----- -------
| 2 |
| - ---- --------
3 rows IN SET (0.00 sec)
出力結果は 3 レコードあり、学生証を持つ学生であることがわかります。 2は3と4、5はこの3コースを選択しました。
PHP に配置する場合、以下に示すように、ループを使用してこれら 3 つのレコードを取得する必要があります。
コードは次のとおりです。 foreach ($pdo->query("SELECT Student_id, course_id FROM Student_courses WHERE Student_id=2") as $row) { $result[] = $row['courses_id'];
}
GROUP_CONCAT() 関数と GROUP BY ステートメントを使用すると、次のように非常に簡単になります。以下:
コードは次のとおりです: mysql> SELECT 学生 ID, GROUP_CONCAT( コース ID) AS コース FROM 学生コース WHERE 学生 ID=2 GROUP BY 学生 ID;学生 ID | コース - ----------- --------
2 | ----- --- ------1 row IN SET (0.00 秒)
このように、PHP での処理は簡単です:
PHP コード
$row = $pdo ->query("SELECTstudent_id, GROUP_CONCAT(courses_id ) AS course FROM Student_courses WHERE Student_id=2 GROUP BY Student_id"); > コードをコピー コードは次のとおりです: SELECT Student_id, GROUP_CONCAT(courses_id) SEPARATOR '|||') AS コース FROM Student_courses WHERE Student_id=2 GROUP BY Student_id; コードをコピー コードは次のとおりです: SELECT 学生 ID, GROUP_CONCAT(コース ID ORDER BY コース ID DESC) AS コース FROM 学生コース WHERE 学生 ID=2 GROUP BY 学生 ID;
区切り文字もカスタマイズできます。デフォルトは区切り文字として「,」です。これを「|||」に変更する場合は、たとえば、
SQL コード
SQL コード