2012-12-12 3 views
1

하나의 주 테이블이 외래 키가있는 다른 테이블에 연결된 관계형 데이터베이스가 있습니다. 모든 데이터를 가져 오기 위해 PHP에서보고 도구를 작성하려고하지만이 중 일부분 만 살펴 보았습니다. 문제가없는 있도록 학생 1 : 모두 1이다여러 개의 열과 행을 단일 항목으로 결합

SELECT * 
FROM student s 
LEFT OUTER JOIN ep e ON s.sID = e.sID 
LEFT OUTER JOIN ntc n ON s.sID = n.sID 
LEFT OUTER JOIN pk p ON s.sID = p.sID 
LEFT OUTER JOIN roa r ON s.sID = r.sID 
WHERE s.sID = '$id' 

EP, NTC와 PK :

여기 내 지금까지 쿼리입니다. 그러나 roa 테이블에는 각 학생에 대한 여러 레코드 (여러 행에 걸쳐 있음)가 있습니다.

ROA 테이블 구조 :

+----------+--------------+------+-----+-------------------+----------------+ 
| Field | Type   | Null | Key | Default   | Extra   | 
+----------+--------------+------+-----+-------------------+----------------+ 
| roaID | int(11)  | NO | PRI | NULL    | auto_increment | 
| sID  | int(11)  | NO | MUL | NULL    |    | 
| roa  | varchar(255) | NO |  | NULL    |    | 
| roaStaff | varchar(50) | NO |  | NULL    |    | 
| visible | tinyint(1) | NO |  | 1     |    | 
+----------+--------------+------+-----+-------------------+----------------+ 

select * from roa where sID = 1 반환 : 그래서

<-student, etc data 
..-------+-----+-----------------------------------------------+---------+ 
.. roaID | sID | roa           | visible | 
..-------+-----+-----------------------------------------------+---------+ 
.. 41 | 1 | Description 1 Staff 1, Description 2 Staff 2 |  1 | 
... 
... 

:

+-------+-----+---------------+----------+---------+ 
| roaID | sID | roa   | roaStaff | visible | 
+-------+-----+---------------+----------+---------+ 
| 41 | 1 | Description 1 | Staff 1 |  1 | 
| 60 | 1 | Description 2 | Staff 2 |  1 | 
+-------+-----+---------------+----------+---------+ 

은 내가 무엇을 달성하기 위해 내 원래의 쿼리 후 나는 것은 같은 결과 일입니다 roa.roa와 roa.roaStaff는 모두 하나의 셀에 있습니다.

나는 GROUP_CONCAT을 사용해 보았지만 여러 열을 그룹화하지 않고 하나의 열에서만 작동하도록 만들었습니다.

모든 도움을 주시면 대단히 감사하겠습니다.

안부.

답변

1

SELECT ......, GROUP_CONCAT(CONCAT(roa, ' ', roaStaff)) roa 
FROM ... 

그래서 당신은 당신의 쿼리에 연결하면,

SELECT * 
FROM student s 
LEFT OUTER JOIN ep e ON s.sID = e.sID 
LEFT OUTER JOIN ntc n ON s.sID = n.sID 
LEFT OUTER JOIN pk p ON s.sID = p.sID 
LEFT OUTER JOIN 
(
    SELECT sID, GROUP_CONCAT(CONCAT(roa, ' ', roaStaff)) roa 
    FROM roa 
    GROUP BY sID 
) r ON s.sID = r.sID 
WHERE s.sID = '$id' 

후속 질문을 이런 식으로 뭔가를 시도하는 방법 테이블 roavisible 필드에 대한? 어떻게 당신은

(!) 참고를 표시 할 것

쿼리에 SQL INJECTION에 취약, 보호하는 방법을 알아 보려면 아래 문서를 참조하십시오에서 그것을

+0

안녕, 고마워. 보이는 것은 실제로 사용되지 않습니다. 삭제에 대한 대안이 더 많으므로 우리는 여전히 "삭제 된"것을 되돌아 볼 수 있습니다. 모든 데이터는 쿼리에 추가되기 전에 mysqli_real_escape_string을 통해 파싱됩니다. 주사를 예방하기에 충분하지 않습니까? – Jake

관련 문제