2017-05-19 5 views
1

아주 기본적인 질문이지만 해결책을 찾지 못했습니다.postgres에서 배열 검색

일부 값이있는 테이블에서 배열 (int [])을 1 열 저장하고 검색하려고합니다. 저장 및 검색 잘 작동하지만 그것을 선택하면 PHP로 문자열로 가져옵니다.

표 주

col id (int) = 1 
col days (int[]) = {1,1,1,1,1,0,0} 

PHP

$query = SELECT id, days, manyother FROM week //array_to_json(days) does the same result 
$pdo->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL); 
$result = $pdo->query($query); 

$test = $result->fetchAll(PDO::FETCH_ASSOC); 
echo json_encode($test) 

결과 :

id: 1 
days: "[1,1,1,1,1,0,0]" 
manyother: "" 

미안 내가로 json_encode/디코딩 편집에 뭔가 그리워 확인하십시오의로 json_encode에 의해 영향을받지를 , 나는 그것을 debuged 전에 '[1,1,1,1,1,0,0]'과 같은 값을 반환합니다.

편집 2 : 작동하는 솔루션을 찾았지만 로딩 시간이 15 * 배 증가했습니다. : D 그래서 질문은 아직 열리 며 그 순간에 해결 방법이 있습니다. 배열을 선택할 때

foreach($test as $key => $value){ 
     $test[$key]['days'] = json_decode($value['days']); 
} 

답변

1

, 당신은 길 배열이 표시됩니다 해킹 할 수

t=# select json_build_array(array[1,2,3,4])->0; 
?column? 
----------- 
[1,2,3,4] 
(1 row) 

그것은 쉽게 평가와 함께 다음 PHP에 의해 평가되어야한다. 심지어 json_agg 후 평가 전체 데이터 세트에 :

t=# select json_agg(s162) from s162; 
json_agg 
[{"i":0,"a":[1,2,3,4]}, 
{"i":1,"a":[1,4]}] 
(1 row) 
Time: 0.281 ms 
+0

근무일 : "[1,1,1,1,1,0,0]는"아직 응답 문자열로 반환합니다. Select json_build_array (days) -> 0 FROM week – Doomenik

+0

을 사용했습니다. 당신은 여전히 ​​배열을 얻으려면 문자열을 평가해야합니다 –

+0

예 내 질문은 어떻게 이것을 할 수 있습니다. 현재 나는 후행에서 문자열을 얻지 만 배열을 원합니다. – Doomenik

관련 문제