Frage

Sorry, wenn der Titel nicht als beschreibend ist, wie es sein soll, aber es ist etwas schwierig in einem Satz zu erklären, was ich zu tun versuchen.;)

Ich habe eine Tabelle, die übergeordneten Objekte mit ihrem jeweiligen Kind verbindet. Und ich habe eine andere Tabelle mit allen Objekten (Eltern und Kinder) mit seinen respectives Bilder. Allerdings wird das Bild nur für die Eltern-Objekte festgelegt. Ich mag diese letzte Tabelle aktualisieren und das Childs Bild das gleiche Bild gesetzt, das bereits für seine Eltern festgelegt ist. Außerdem, wie es für jedes Objekt mehr als ein Bild ist, ich mag eine insbesondere setzen, die ich auf der Grundlage einer Attributspalte wissen kann.

Meine Tabellen in etwa so aussehen:

RelationTable

Kind-id

Eltern-ID

ImageTable

Objekt-ID

Attribut-ID

image-url

Und hier geht ein Beispiel, um die Dinge zu klären:

RelationsTable

Kind-id | Eltern-ID

3 | 1

4 | 1

5 | 2

ImageTable

Objekt-ID | Attribut-ID | Bild-URL

1 | goodimage | image1.jpg

1 | badimage | image1b.jpg

2 | goodimage | image2.jpg

2 | badimage | image2b.jpg

3 | goodimage | no

3 | badimage | no

4 | goodimage | no

4 | badimage | no

5 | goodimage | no

5 | badimage | no

So würde Ich mag die Bilder von Objekten 3 setzen, 4 und 5 (Kind ist) zu ihren jeweiligen Mutter Bildern, sondern auf die ‚richtig‘ diejenigen, dh die Bilder mit ‚goodimage‘ als Attribut-ID.

Am Ende sollte es wie folgt aussehen:

1 | goodimage | image1.jpg

1 | badimage | image1b.jpg

2 | goodimage | image2.jpg

2 | badimage | image2b.jpg

3 | goodimage | image1.jpg

3 | badimage | no

4 | goodimage | image1.jpg

4 | badimage | no

5 | goodimage | image2.jpg

5 | badimage | no

Eigentlich ist mir egal, wenn ‚badimage‘ als auch gesetzt ist, aber das Wichtigste ist ‚goodimage‘.

Ich habe versucht, so etwas wie:

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'

, aber es funktioniert nicht, da es nicht richtig SQL-Syntax ist. Ich weiß nicht, ob ich eine Variable verwendet werden soll (nie verwendet) oder, wenn dies mit nur einem SQL-Satz durchgeführt werden.

Jede Hilfe wäre sehr geschätzt werden.

War es hilfreich?

Lösung

so etwas wie das?

NOTES:

Dies könnte zu einem verschmolzen werden    Nicht-Unterabfrage Aussage, aber ich war    faul.

Ich habe nicht getestet, erwarten Tippfehler

;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"

Andere Tipps

Vor allem, wenn die Beziehung zwischen Eltern und Kind ist 1: n, warum fügen Sie nicht nur diese Information an den gleichen Tisch? z.B. Feldname „parentid“ (wenn es leer / null, es ist nur ein Elternteil). Vorteil:. Sie benötigen keine zusätzliche Tabelle benötigen und können leicht eine Hierarchie schaffen, wenn nötig

Und für das Bild, ich denke, man das irgendwo im Code angezeigt werden soll, aber es soll einfacher sein, nur die SELECT ändert die Bild-URL der Eltern zu bekommen, ist kein Bild für das Kind gegeben wird. Vorteil:. Keine Notwendigkeit, die Tabelle zu aktualisieren, wenn neue Einträge erhalten, und es wäre auch möglich sein, für einige Kind Einträge ihr eigenes Bild zu haben (falls erforderlich)

edit: gerade Ihren neuen Kommentar über den Open-Source-Projekt ist Teil bemerkt, natürlich das es schwer, das Datenbank-Design zu ändern macht. Aber vielleicht ist es noch einfacher, einige der Probleme, auf die Programmierseite zu bewegen (es sei denn, dies durch die Open-Source-Software behandelt wird als auch).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top