MysqlのGROUTP_CONCAT()関数の使い方
2553 ワード
文法:GROUT_CONCAT([DISTINCT] expr [,expr ...][ORDER BY。 {unsigned_インテグ | 同前name | expr)[ASC | DESC [,同前name ...]][SEPAATOR strval])この関数をデモします。まず学生選択の授業表studentを作成します。coursesとテストデータを充填します。SQLコード
CREATE TABLE student_courses (
student_id INT UNSIGNED NOT NULL,
courses_id INT UNSIGNED NOT NULL,
KEY(student_id)
);
INSERT INTO student_courses VALUES (1, 1), (1, 2), (2, 3), (2, 4), (2, 5);
学生IDが2で選択されたコースを検索するには、次のSQL:SQLコードを使用します。
mysql> SELECT student_id, courses_id FROM student_courses WHERE student_id=2;
+------------+------------+
| student_id | courses_id |
+------------+------------+
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
+------------+------------+
3 rows IN SET (0.00 sec)
出力結果は3つの記録があり、学生IDは2の学生が3、4、5の3つのコースを選んだと説明しています。PHPに入れて、この3つの記録を一つのサイクルで取らなければなりません。以下の通りです。 PHPコード
foreach ($pdo->query("SELECT student_id, courses_id FROM student_courses WHERE student_id=2") as $row) {
$result[] = $row['courses_id'];
}
で、GROUTP_を採用すればCONCAT関数とGROUT BY文はとても簡単です。次のようになります。 SQLコード
mysql> SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 3,4,5 |
+------------+---------+
1 row IN SET (0.00 sec)
このようにphpで処理するのは簡単です。 PHPコード
$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");
$result = explode(',', $row['courses']);
セパレータはまたカスタムでき、デフォルトはセパレータとして「、」に変更する場合は、SEPAATORを使用して指定します。 SQLコード
SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
は、このグループの値を並べ替えて文字列に接続することもできます。例えば、courses_id降順で並べます。SQLコード
SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;