0

タイトルが説明的でない場合は申し訳ありませんが、私がやろうとしていることを一文で説明するのはちょっと難しいです;)。

親オブジェクトとそれぞれの子オブジェクトをリンクするテーブルが 1 つあります。そして、すべてのオブジェクト (親と子) とそれぞれの画像を含む別のテーブルがあります。ただし、画像は親オブジェクトに設定されているだけです。この最後のテーブルを更新し、子の画像を親に既に設定されているのと同じ画像に設定したいと思います。また、オブジェクトごとに複数の画像があるため、属性列に基づいて知ることができる特定の画像を設定したいと思います。

私のテーブルは次のようになります。

関係テーブル

子ID

親 ID

画像テーブル

オブジェクト ID

属性 ID

画像の URL

そして、物事を明確にするために例を示します:

関係テーブル

子 ID | 親 ID

3 | 1

4 | 1

5 | 2

画像テーブル

オブジェクト ID | 属性 ID | 画像の URL

1 | 良い画像 | 画像1.jpg

1 | 悪いイメージ | image1b.jpg

2 | 良い画像 | 画像2.jpg

2 | 悪いイメージ | image2b.jpg

3 | 良い画像 | 番号

3 | 悪いイメージ | 番号

4 | 良い画像 | 番号

4 | 悪いイメージ | 番号

5 | 良い画像 | 番号

5 | 悪いイメージ | 番号

したがって、オブジェクト 3、4、および 5 (子) の画像をそれぞれの親画像に設定したいと思いますが、「正しい」画像、つまり属性 ID として「goodimage」を持つ画像に設定したいと思います。

最終的には次のようになります。

1 | 良い画像 | 画像1.jpg

1 | 悪いイメージ | image1b.jpg

2 | 良い画像 | 画像2.jpg

2 | 悪いイメージ | image2b.jpg

3 | 良い画像 | 画像1.jpg

3 | 悪いイメージ | 番号

4 | 良い画像 | 画像1.jpg

4 | 悪いイメージ | 番号

5 | 良い画像 | 画像2.jpg

5 | 悪いイメージ | 番号

実際には「badimage」が設定されていても構いませんが、重要なのは「goodimage」です。

私は次のようなことを試みてきました:

UPDATE ImageTable

SET image = (SELECT image-url FROM ImageTable WHERE ImageTable.object-id = RelationTable.parent-id AND ImageTable.attribute-id = 'goodimage')

WHERE ImageTable.object-id = RelationTable.child-id AND ImageTable.attribute-id = 'goodimage'

しかし、それは正しい SQL 構文ではないため、機能しません。変数を使用する必要があるかどうか (変数を使用したことがない)、またはこれが 1 つの SQL 文で実行できるかどうかはわかりません。

どんな助けでも大歓迎です。

4

2 に答える 2

0

このようなもの?

ノート:

これは 1 つの非サブクエリ ステートメントにマージできますが、私は怠惰でした。

私はテストしませんでした。タイプミスが予想されます

;WITH goodlist AS
(
  SELECT child-id, image-url
  FROM relationstable
  left join imagetable on relationstable.child-id = relationstable.child-id and attribute-id = "goodimage"
)
UPATE imagetable
 set imagetable.image-url = 
   (SELECT top 1 image-url from goodlist where child-id = imagetable.object-id) 
WHERE imagetable.image-url = "no"
于 2009-11-30T21:22:18.380 に答える
0

まず、親子の関係が1対nの場合、その情報を同じテーブルに追加してみませんか?例: fieldname "parentid" (空/null の場合、それは単なる親です)。利点: 追加のテーブルは必要なく、必要に応じて簡単に階層を作成できます。

画像については、これをコードのどこかに表示したいと思いますが、SELECTを変更して親の画像URLを取得する方が簡単なはずです。子には画像が指定されていません。利点: 新しいエントリを取得したときにテーブルを更新する必要がなく、一部の子エントリに独自のイメージを含めることもできます (必要な場合)。

編集: オープンソース プロジェクトの部分に関する新しいコメントに気付きました。もちろん、これによりデータベースの設計を変更するのが難しくなります。しかし、問題の一部をプログラミング側に移動する方が簡単かもしれません (これがオープンソース ソフトウェアでも処理されない限り)。

于 2009-11-30T11:53:20.807 に答える