당신은 당신의 가입 쿼리로 GROUP_CONCAT() 함수를 사용 할 수
GROUP_CONCAT (EXPR)
,174,
이 함수는 그룹에서 NULL이 아닌 연결 된 값이 인 문자열 결과를 반환합니다. NULL이 아닌 값이 없으면 NULL을 반환합니다. 다음 전체 구문은 다음
GROUP_CONCAT ([DISTINCT] EXPR [EXPR ...] BY [ORDER unsigned_integer {| COL_NAME | EXPR} [ASC | DESC], ... COL_NAME] [세퍼레이터 str_val])
의 MySQL> SELECT STUDENT_NAME, -> GROUP_CONCAT (test_score) -> 학생 FROM - STUDENT_NAME BY> 기;
또는 :
MySQL의> SELECT STUDENT_NAME, -> GROUP_CONCAT (DISTINCT test_score - test_score DESC의 SEPARATOR ''BY> ORDER) -> 학생 FROM 이 - STUDENT_NAME BY> GROUP; 그래서
: (중간 테이블)
SELECT lesson.name, GROUP_CONCAT(subjects.name SEPARATOR ', ')
FROM lesson JOIN subjects ON (subject.id = lesson.subject)
GROUP BY lesson.name;
TEST
CREATE TABLE lesson (name varchar (20), subject integer);
CREATE TABLE subjects (id integer, name varchar(20));
INSERT INTO subjects VALUES (1, 'Math'), (2, 'Physics'), (3, 'Chemistry');
INSERT INTO lesson VALUES ('Lesson A', 1);
INSERT INTO lesson VALUES ('Lesson A', 2);
INSERT INTO lesson VALUES ('Lesson A', 3);
INSERT INTO lesson VALUES ('Lesson B', 2);
INSERT INTO lesson VALUES ('Lesson B', 3);
INSERT INTO lesson VALUES ('Lesson C', 1);
SELECT lesson.name, GROUP_CONCAT(subjects.name SEPARATOR ', ')
FROM lesson JOIN subjects ON (subjects.id = lesson.subject)
GROUP BY lesson.name;
+----------+--------------------------------------------+
| name | GROUP_CONCAT(subjects.name SEPARATOR ', ') |
+----------+--------------------------------------------+
| Lesson A | Math, Chemistry, Physics |
| Lesson B | Chemistry, Physics |
| Lesson C | Math |
+----------+--------------------------------------------+
3 rows in set (0.00 sec)
더 복잡 TEST
CREATE TABLE lesson (id integer, name varchar (20));
CREATE TABLE subjects (id integer, name varchar(20));
CREATE TABLE lesson_sub (lesson_id integer, subject_id integer);
INSERT INTO subjects VALUES (1, 'Math'), (2, 'Physics'), (3, 'Chemistry');
INSERT INTO lesson VALUES (1, 'Lesson A'), (2, 'Lesson B'), (3, 'Lesson C');
INSERT INTO lesson_sub VALUES (1,1), (1,2),(1,3),(2,2),(2,3),(3,1);
SELECT lesson.name, GROUP_CONCAT(subjects.name SEPARATOR ', ') AS subjects
FROM lesson_sub JOIN lesson ON (lesson.id = lesson_sub.lesson_id)
JOIN subjects ON (subjects.id = lesson_sub.subject_id)
WHERE CONCAT(lesson.name, subjects.name) LIKE '%Chem%'
GROUP BY lesson.name;
SELECT name, subjects FROM (
SELECT lesson.name, GROUP_CONCAT(subjects.name SEPARATOR ', ') AS subjects
FROM lesson_sub JOIN lesson ON (lesson.id = lesson_sub.lesson_id)
JOIN subjects ON (subjects.id = lesson_sub.subject_id)
GROUP BY lesson.name) AS lesson_clear
WHERE CONCAT(name, subjects) LIKE '%Chem%';
+----------+--------------------------------------------+
| name | GROUP_CONCAT(subjects.name SEPARATOR ', ') |
+----------+--------------------------------------------+
| Lesson A | Chemistry |
| Lesson B | Chemistry |
+----------+--------------------------------------------+
2 rows in set (0.00 sec)
+----------+--------------------------+
| name | subjects |
+----------+--------------------------+
| Lesson A | Physics, Math, Chemistry |
| Lesson B | Physics, Chemistry |
+----------+--------------------------+
2 rows in set (0.00 sec)
당신이 같은 프레임 워크를 사용하는 방법에 대해 생각 해본 적이 [CakePHP의] (http://cakephp.org/) 또는 [CodeIgnighter] (http://codeignighter.com/)에서 이런 종류의 것을 구현하는 유틸리티 메소드를 제공 할 수 있습니까? – tadman