2010-01-14 4 views
1

모든 데이터를 충실하게 정규화 했으므로 출력을 위해 3NF 행을 단일 행으로 결합하는 데 문제가 있습니다. 지금까지 서버 측 코딩으로이 작업을 해왔지만 여러 가지 이유로 여러 행에 관련된 모든 행을 선택하고 MySQL의 모든 행을 하나의 행에 결합해야합니다.3NF mysql 테이블에서 여러 행의 내용 결합

이렇게 시도하고 설명하기 위하여 :

나는 3 개의 테이블이있다.

  • 카테고리
  • 기사
  • CategoryArticles_3NF

카테고리는 그것은 은 articleID 구성되는 기사 테이블에서 기사의 수를 포함 할 수있는 등 카테고리 ID + 제목, 설명을 포함 + 내용을 담을 텍스트 필드. 범주 기사 테이블은 두 테이블을 연결하는 데 사용되므로 CategoryIDArticleID을 모두 포함합니다.

이제 범주 레코드를 선택하고 연결하는 CategoryArticles_3NF 테이블을 통해 Articles 테이블을 조인하면 결과는 해당 범주에 포함 된 각 기사에 대해 별도의 행이됩니다. 문제는 각 범주에 대해 하나의 행을 출력하고 내용이 인 내용이 모두 개 이내 인 것입니다.

어리석은 요청 인 것처럼 들린다면 그것은 그렇기 때문입니다. 나는 기사를 문제를 설명하는 좋은 방법으로 사용하고있다. 내 데이터는 실제로 다소 다릅니다.

어쨌든 - 이것은 'GROUP_CONCAT'콘텐츠 필드 함께 그룹에 문을 사용하는 것입니다 달성하기 위해 내가 볼 수있는 유일한 방법 - 이것에 문제가이 반환 할 수있는 데이터의 양에 한계가 있다는 것입니다, 그리고 훨씬 더 많은 것을 처리 할 수 ​​있어야합니다.

아무에게도 어떻게 할 수 있습니까?

감사합니다.

답변

2

더 많은 정보없이 프런트 엔드에서 수행해야하는 것처럼 들립니다.

필요한 경우 시스템 변수 group_concat_max_len을 설정하여 GROUP_CONCAT의 크기 제한을 늘릴 수 있습니다. 최대 값은 max_allowed_packet이며이를 늘릴 수도 있습니다. 나는 패킷의 최대 크기가 1GB라고 생각한다. 그 이상으로 갈 필요가 있다면 설계에 심각한 결함이 있습니다.

편집 : 답변에 포함되어 있으므로 댓글에 묻어서는 안됩니다 ...당신은 세계적으로 다음 group_concat_max_len을 변경하지 않으려면

당신과 당신의 세션을 변경할 수 있습니다 일반적으로이 프런트 엔드에서 수행

SET SESSION group_concat_max_len = <your value here> 
+0

하지만이 특정 문제에 대해 나는 필요 그것은 MySQL을 통해 이루어졌습니다. 공유 서버에서 실행 중이므로 group_concat_max_len 또는 max_allowed_packet 설정을 변경할 수있는 권한이 없습니다. 데이터는 아마도 약 100kb를 초과 할 수 없습니다. –

+0

나는 당신이 당신의 세션에 대해서만 group_concat_max_len을 설정할 수 있다고 믿는다. "SET SESSION group_concat_max_len = <당신의 가치는 여기>"시도하십시오. –

+0

맞습니다. 결국 시간이 중요한 요소 였기 때문에 MySQL보다는 서버 측 코딩을 사용했습니다. 성능에 문제가 있었지만 문제를 처리하고 싶지는 않았습니다 ... 그러나 눈에 띄지는 않을 것입니다. 이 크기의 앱. –

관련 문제