タイムラインの絞り込み機能の実装(続き)

hiwm0126 17views 更新:2017年7月19日

前回の反省を踏まえて、変更を加えました。 まずSQLの文をINTERSECTを使うのではなく、WHEREの中に条件として結合を使うことにしました。 TimelineSelectData.javaの1209行目のif文を以下のように変更しました。

    if (minId > 0) {
      body.append(" AND eip_t_timeline.timeline_id > " + minId);
   if ("FILE".equals(displayParam)) {
       body.append(" AND eip_t_timeline.timeline_id = eip_t_timeline_file.timeline_id");
     } else if ("L".equals(displayParam)) {
       body.append(" AND eip_t_timeline.timeline_id = eip_t_timeline_url.timeline_id"); 
     }
    }

しかしまたうまくいかなかったので、1209行目のif文の内容を詳しく見てみました。 するとminIdは、直近のTimelineIDをあらわすことがわかりました。 1209行目のif文とは別にif文を作成することにしました。 まず以下の文を作成しました。

    if ("FILE".equals(displayParam)) {
      body
        .append(" AND eip_t_timeline.timeline_id = eip_t_timeline_file.timeline_id");
    } else if ("L".equals(displayParam)) {
      body
        .append(" AND eip_t_timeline.timeline_id = eip_t_timeline_url.timeline_id");
    }

これをどこに挿入すればよいかを考えます。 最初に抽出したいため、bodyを初期化している文のすぐ後(1192行目)に挿入します。 しかしこれもまたうまくいきませんでした。 文をいれる場所を変えてみたりしたのですがダメでした。 先輩にアドバイスをいただいたところ、FROMに参照すべきテーブルを書いていないことがわかったため、FROMに加えました。

/** 変更前 **/
body.append(" FROM eip_t_timeline ");
/** 変更後 **/
body.append(" FROM eip_t_timeline, eip_t_timeline_file, eip_t_timeline_url ");

また1192行目に追加した文を以下のように変更しました。

    if ("FILE".equals(displayParam)) {
      body
        .append(" eip_t_timeline.timeline_id = eip_t_timeline_file.timeline_id AND");
    } else if ("L".equals(displayParam)) {
      body
        .append(" eip_t_timeline.timeline_id = eip_t_timeline_url.timeline_id AND");
    }

しかしこれを実行すると読み込みが遅くなってしまいました。 単体での抽出は可能なのですが、条件分岐させると動作が重くなってしまいました。 この理由を探って改善させていきたいと思います。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません