2012-01-26 2 views
0

그래서 직렬화 된 배열을 저장하는 db가 있습니다. 직렬화mysql에서 직렬화 된 데이터를 가져 오기

$array = array('count1' => 10, 'count2' => 20, 'count3' => 4); 

:

a:3:{s:6:"count1";i:10;s:6:"count2";i:20;s:6:"count3";i:4;} 

MySQL의 쿼리를 사용 COUNT1 + COUNT2 + count3를 당길 수 있을까? 나는 PHP의 폭발 같은 것을 찾고 있다고 생각한다. 확실히 할 수는 없지만 나는 물을 것이라고 생각했습니다.

가장 높은 count1 + count2 + count3 행을 가져와 총 개수를 반환해야합니다. TONS 개의 행이 있기 때문에 각 행을 반복하고 비 직렬화하면 작동하지 않습니다.

답변

2

SQL을 통해 직렬화 된 데이터의 일부에 액세스해야하는 경우 별도의 열에 저장해야합니다.

정규 표현식과 같은 기술을 사용하여이 문자열의 세 값에 액세스 할 수는 있지만 색인이 쓸모 없으므로 WHERE 조건에서 사용하면 속도가 매우 느려집니다. 프로그래밍 언어에서 goto을 사용하는 것보다 훨씬 더 큰 혼란.

그래서 해결 방법은 새 열을 만든 다음 모든 행을 반복하고, 열을 비 직렬화 한 다음 합계를 새 열에 저장하는 것입니다. 시간이 좀 걸릴 수 있지만 한 번만 필요합니다.

응용 프로그램에 따라 세 열을 만들고 각 값을 별도로 저장하는 것이 좋습니다.

+0

50 개 이상의 필드가있는 여러 개의 새 테이블을 만들어야합니다. 직렬화 된 데이터를 사용하는 것이 최선의 선택이라고 생각합니다. 직렬화 된 배열의 하나의 요소에 의해 행을 순서대로 정렬 할 수 있습니까? – domino

관련 문제