2016-08-10 10 views
0

私はツイートテーブルの各エントリについて、分析済みのウェート数(アナリストあたり1つ)の分析済みウェイト(@OneToMany)と分析済みウェート(@ManyToOne) 。本質的に、私はアナリスト(表で表される)をいくつでも持つことができ、それぞれがツイートを1回だけ分析することができます。もう少し複雑にするために、ツイートテーブルのエントリは、別のテーブルで表されるプロセスごとにグループ化されています。PostgreSQL - 別のテーブルに基づいてテーブルを選択

私の質問は、特定のprocess_idとanalyst_idが与えられた最後のエントリのtweet_idのanalyzetweetテーブルをクエリし、それを使って同じprocess_idとanalyst_idも与えられたツイートテーブルの次のツイートを見つける方法は?基本的には、アナリストに、その特定のプロセス(実行)内でまだ分析していない次のつぶやきを与えたいと思います。ここで

は私のテーブルです:

CREATE TABLE tweet (
     id SERIAL PRIMARY KEY, 
     process_id INTEGER NOT NULL REFERENCES process(id) ON DELETE CASCADE ON UPDATE CASCADE, 
     ... 
); 


CREATE TABLE analyzedtweet (
     id SERIAL PRIMARY KEY, 
     tweet_id INTEGER NOT NULL REFERENCES tweet(id) ON DELETE CASCADE ON UPDATE CASCADE, 
     analyst_id INTEGER NOT NULL REFERENCES analyst(id) ON DELETE CASCADE ON UPDATE CASCADE, 
     process_id INTEGER NOT NULL REFERENCES process(id) ON DELETE CASCADE ON UPDATE CASCADE, 
     ... 
); 


CREATE TABLE process (
     id SERIAL PRIMARY KEY, 
     ... 
); 


CREATE TABLE analyst (
     id SERIAL PRIMARY KEY, 
     ... 
); 

私はこれを行う方法を知っている唯一の方法は2つの段階である:特定process_idを(PROCESSID)とanalyst_id(analystId)を考えると

  • を実行しますそのプロセスでそのアナリストが分析した最後のtweet_idを私に渡すためのクエリです。

SELECT tweet_id from analyzedtweet WHERE analyzedtweet.analyst_id = analystId AND analyzedtweet.process_id = processId ORDER BY analyzedtweet.tweet_id DESC LIMIT 1

  • (latestTweetIdを依頼するという。)上記のクエリの結果を取り、次のクエリを実行します。私はそこにあると確信している

SELECT * from tweet WHERE tweet.id > latestTweetId AND tweet.process_id = processId ORDER BY tweet.id DESC LIMIT 1

をJOINでこれを行うもっと良い方法は、私はちょうど方法を理解することはできません。

最後に、私はHibernateを使用しており、POJOを取得したいと考えています。

答えて

0

あなたは与えprocess_idを最新のつぶやきを取得して、このクエリを使用している場合analyzedtweet_id:

List<Tweet> t = session.createQuery("select t from tweet t 
      join t.process p,t.analyzedtweet a 
      where p.id=? and a.id=? order by t.id desc") 
      .setParameter(1, process_id) 
      .setParameter(2, analyzedtweet_id) 
      .setMaxResults(1).getResultList(); 
+0

私はあなたのフィールドの一部が間違っていると思いますか? t.analyzedtweeetは存在しませんか? Tweetはprocess_idへの外部キー参照を持っていますが、それだけです。 – Brooks

関連する問題