0

Trac を使用してシステムを開発していますが、返される "changelog" エントリの数を制限したいと考えています。問題は、Trac が を使用して複数のテーブルからこれらのエントリを照合しunion、後でタイムスタンプに基づいて単一の「変更セット」に結合することです。結果を最新のもの、たとえば 3 つの変更セットに制限したいのですが、これには、3 つの一意のタイムスタンプが得られるまで、必要な数の行を取得する必要があります。ソリューションは、SQLite/Postgres で機能する必要があります。

Trac の現在の SQL

現在の SQL 結果

Time                User  Field         oldvalue   newvalue   permanent
=======================================================================
1371806593507544    a     owner         b         c           1
1371806593507544    a     comment       2         lipsum      1
1371806593507544    a     description   foo       bar         1
1371806593324529    b     comment       hello     world       1
1371806593125677    c     priority      minor     major       1
1371806592492812    d     comment       x         y           1

意図した SQL の結果 (例: 1 つのタイムスタンプに限定)

Time                User  Field         oldvalue   newvalue   permanent
=======================================================================
1371806593507544    a     owner         b         c           1
1371806593507544    a     comment       2         lipsum      1
1371806593507544    a     description   foo       bar         1
4

2 に答える 2

1

すでにご自身で指摘されているように、結果の数が不明であるため、これは SQL では解決できません。そして、これは必須ではないと思います。

少し変更したtrac/ticket/templates/ticket.html Genshi テンプレートを使用して、必要なものを取得できます。変化する

      <div id="changelog">
        <py:for each="change in changes">

の中へ

      <div id="changelog">
        <py:for each="change in changes[-3:]">

ファイルを配置して<env>/templates/、Webサーバーを再起動します。ただし、Trac インストールをアップグレードしようとするときはいつでも、ticket.html の変更に注意してください。これを行うたびに、それぞれのバージョンの現在のテンプレートにこの変更を再適用する必要がある場合があります。しかし、Trac コア コードにパッチを適用するよりもはるかに高速でクリーンです。

于 2013-06-21T15:35:51.133 に答える
0

("Data Limit 1" 結果セットのように) 3 つのレコードだけが必要な場合は、次を使用できますlimit

select *
from t
order by time desc
limit 3

最新の 3 つのタイム スタンプのすべてのレコードが必要な場合は、結合を使用できます。

select t.*
from t join
     (select distinct time
      from t
      order by times desc
      limit 3
     ) tt
     on tt.time = t.time
于 2013-06-21T10:30:18.870 に答える