2013-05-17 2 views
1

POSTGRESQL 데이터베이스를 사용 중이고 JSON 유형의 열로 주문해야합니다. 다음과 같은 오류가 발생합니다.JSON 유형의 열로 주문하는 SQL 쿼리를 수행하는 방법은 무엇입니까?

ERROR: could not identify an ordering operator for type json 
LINE 1: SELECT * FROM "field" "t" ORDER BY "t"."brand" LIMIT 10 

JSON 데이터 형식으로 주문할 수 있습니까? 주위에 어떤 제안?

테이블 필드 :

  • FIELD_ID INT
  • 이름 TEXT
  • 형 INT
  • 브랜드 JSON 여기

내 코드입니다 :

$sql = 'SELECT * FROM "field" "t" ORDER BY "t"."brand"';  
$data = Yii::app()->db->createCommand($sql); 
$result = $data->queryAll(); 
+0

가 어떤 순서로 당신이 그들에 표시 할 않습니다 plperl, 또는 확장을 설치? '{ "foo": "bar"}'가'{ "answer": 42}'앞이나 뒤에 올 이유가 분명하지 않기 때문에 Postgres에 주문 기능이 내장되어 있지 않습니다. – IMSoP

+0

테이블 설명 게시 . 그리고 작성한 PHP 코드. JSON 문자열뿐입니다. –

+0

코드를 포함하도록 업데이트했습니다. 내 브랜드 데이터에는 [ "1", "2"] 또는 [ "3"]과 같은 데이터가 있습니다. 데이터로 주문하고 싶습니다. – albertski

답변

1

이 작업을 수행하려면 json 접근자가 필요합니다. PG 9.2로, 아무도 내장하지-에 있습니다

http://www.postgresql.org/docs/9.2/static/functions-json.html

PG 9.3 당신이 필요로하는 것이 그 기능을합니다 :

http://www.postgresql.org/docs/9.3/static/functions-json.html

를 한편을, 당신은 접근 방법을 쓸 수 예를 들어

https://github.com/theirix/json_accessors

+0

Denis, PG 9.3을 사용하고 있습니다. 내가 사용할 수있는 기능을 알려 주실 수 있습니까? 그것들은 항목을 선택하기 만하고 주문하지는 않는 것 같습니다. – albertski

+0

나는 100 %는 아니지만, 시도하지는 않았지만 9.3 문서를 기반으로 필자는 't ->'brand '또는't - ''brand ''중 하나 인 것으로 보인다. –

+0

@Denis'brand'는 JSON 내부의 필드가 아니라 컬럼의 이름이라고 생각합니다. – IMSoP

관련 문제