2014-02-20 2 views
0

지난 두 주 동안 나는 여러분 모두에 대한 엄청난 도움을 받았습니다 (ok ok가 아닌 ...).하지만 아마도 20 명 이상이 , 그리고 거의 모든 의견이 도움이되었다). 이것은 정말 놀랍습니다. 그리고 나는 stackoverflow 팀이 정말로 훌륭한 것을 한 것을 보여줍니다. 그래서 모두에게 감사합니다!Postgresql에서 다중 쿼리 수행하기 - 조건부 루프

지금 아시는 바와 같이 저는 현재 캠퍼스에서 일하고 있으며 Windows 컴퓨터를 사용해야합니다. (나는 여기에서 창문을 사용해야하는 유일한 사람입니다 ... :

이제는 (내가 할 수있는 일은 IT 부서에서 저에게 해주었습니다) Postgres 데이터베이스를 채 웁니다. , 약 400 메가 바이트 데이터와 함께. 아마도 당신을 위해 무거운 Ppostgre 사용자의 대부분은 아니지만, 거의 2mb를 거의 넘어서는 개인 사용을위한 sqlite 데이터베이스에 익숙했다.

어쨌든, - 이제 해당 데이터베이스의 쿼리는 을 잘 처리합니다. 사실 루비를 사용하여 쿼리를 수행합니다.

Postgres 데이터베이스의 항목은 서로 연결되어 있습니다. 다른 필드를 가리키는 한 필드가 있습니다.

예 : 항목 3667은 항목 15566을 가리키며 항목은 15566을 가리 킵니다. 따라서 매우 간단합니다.

기본 항목은 1이므로 모든 검색어의 끝은 1입니다. 따라서 다른 숫자에서부터 마지막 ​​결과로 1에 도달 할 수 있습니다.

나는 반환 된 마지막 결과가 1이 될 때까지 데이터베이스에 대해 개별 쿼리를 만들기 위해 루비를 사용하고 있습니다. 최대 10 개의 개별 쿼리를 사용할 수 있습니다. 암호와 데이터로 psql에 로그인 한 다음 -c를 통해 SQL 쿼리를 수행하면됩니다. 이것은 아마도 이상적은 아니며 로그인과 쿼리를 수행하는 데 약간의 시간이 걸리며 이상 적으로는 한 번만 로그인하고 Postgres에서 모든 쿼리를 수행 한 다음 결과 (이 모든 항목을 결과로 종료)로 종료해야합니다.

이제 내 질문은 다음과 같습니다. - Postgres의 모든 조건부 쿼리를 만드는 방법이 있습니까?

나는 쉘 스크립트와 루비에서 어떻게하는지 알고 있지만 이것이 postgresql에서 전혀 사용 가능한지 모르겠습니다.

나는 문자 그대로 영어로 쿼리를 만들과 같이해야합니다 : 다음의 모든 반환, 마지막으로 발견 항목 결국 하나가 될 때까지,

는 "나에게 부모 항목을 가리 모든 항목을주십시오 이 입장. "

나는 이미 "1"이 반환 될 때까지 여러 가지 쿼리를 만들기 위해 루비를 사용하여이 문제를 "해결했다". 그러나 이것은 상당히 우아하고 효과적이지 않을 것이라고 나를 때린다.

모든 정보는 대단히 감사합니다. - 감사합니다!

편집 (아아, 나는 ... 붙여 넣기 실패) :

예 데이터 세트는 테이블은 다음과 같이 될 것이다 :

id |  parent 
----+---------------+ 
    1 |    1 | 
    2 |  131567 | 
    6 |  335928 | 
    7 |    6 | 
    9 |    1 | 
10 |  135621 | 
11 |    9 | 

나는 작품, 내가 그것을 전적으로 좁힐 시도 희망 예를 들어.ID 이드 9

예를 들어

, ID 11 점, 및 ID 9 포인트 1.

하나가 반환하는 SQL을 사용할 수 있다면 그것은 좋은 것 : 11 -> 9 -> 1

+2

테이블 정의와 샘플 데이터를 추가하고 샘플 데이터의 예상 출력을 –

+0

보겠습니다. hmm ... – shevy

+0

위의 예제 테이블을 추가했습니다. 물론 실제 데이터베이스 테이블보다 훨씬 간단합니다. 크기는 약 240MB입니다.) – shevy

답변

2

예제 테이블 정의를 제공하지 않는다면, 희미하게 묻는 것은 재귀 쿼리로 조작 할 수있는 트리 구조를 생각 나게합니다 : http://www.postgresql.org/docs/8.4/static/queries-with.html.

+0

이 답변은 주로 링크로 구성되어있는 것 같습니다. [여기에 답변의 핵심 부분을 포함하는 것이 더 좋을 것입니다.] (http://meta.stackexchange.com/a/8259), 추가 참조 할 링크를 제공하십시오. 만약 당신이이 일을 끝내지 않았다면, 답을 게시하는 대신 질문에 간단히 [의견 남기기] (http://stackoverflow.com/privileges/comment)를 고려해야합니다. – Dukeling

+0

위 예제 테이블 정의를 추가했습니다. 이 테이블에는 id와 parent라는 두 개의 열이 있습니다. 각 id의 결과는 상위 id이며, 다른 id를 가리키며, 다른 id를 가리킬 수 있으며, 주 ID 1에 도달 할 때까지입니다. 이것은 루비에서 매우 간단합니다. 기본적으로 해쉬입니다. postgresql에서이 작업을 수행 할 수 있는지 확신 할 수 없습니다. – shevy