0

ここに私のデータがあります:

表1...

id 
field1
field2
...

表 2...

id
table1_original_id
table1_new_id

Table1 には、ユーザーがそれらを「更新」できるメカニズムを構築しましたが、それ自体は更新できないレコードが保持されています...ユーザーはレコードを選択し、変更を加え、それらの変更は実際には新しいレコードとして送信されます。会話のために、現在 Table1 に ID 1 ~ 10 の 10 のレコードがあると仮定します。ユーザーは ID 3 への更新を送信します。ID 3 はそのままで、新しいレコード ID 11 が Table1 に追加されます。この新しいレコードと共に、Table2 は ID = 1、t1_original_id = 3、および t1_new_id = 11 の新しいレコードを取得します。

Table1 からレコードの「ペア」を取得するために SQL を選択するとどうなるでしょうか...この場合、クエリは... ID 3 と 11 を提供します。

頭を掻く

DBプラットフォームがPostgres 8.4であることはあまり重要ではないと思います.PHP経由でデータを取得してjqGridで処理しています。レコードの各ペアを個別のjqGridに表示する方向に私を向けることができれば、ボーナスポイント!

お時間とご尽力いただきありがとうございます。

=== 編集 ===
以下は、上記のシナリオに基づいてクエリから返される必要があるもののサンプルです。

id    field1    field2
3     blah      stuff
11    more      things

これらのペアを取得したら、必要に応じて PHP 側でさらに処理できます。

4

2 に答える 2

0

JOIN次のようにTable12 回行う必要があります。

SELECT orig.id AS Orig_ID
     , orig.value AS Orig_Value
     , n.id AS New_ID
     , n.value AS New_Value
FROM Table2 a
JOIN Table1 AS orig
  ON a.table1_original_id = orig.id
JOIN Table1 AS n
  ON a.table1_new_id = n.id

デモ: SQL フィドル

更新: セットを手動で選択せずに必要に応じてペアリングするには、次のようなものが必要です。

SELECT sub.id,sub.value
FROM (SELECT a.id as Update_ID,o.id,o.value, '1' AS sort
      FROM Table2 a
      JOIN Table1 AS o
        ON a.table1_original_id = o.id
      UNION
      SELECT a.id as Update_ID, n.id,n.value, '2' AS sort
      FROM Table2 a
      JOIN Table1 AS n
        ON a.table1_new_id = n.id
      ) AS sub
ORDER BY Update_ID,sort

デモ: SQL フィドル

注: +に変更UNIONします。ファイアウォールの制限により、これらの単語を並べて投稿することはできません。ハードコーディングされた '1' と '2' は、オリジナルが常に新しい前に表示されるようにするためのものです。UNIONALL

于 2013-09-16T20:56:08.850 に答える