Frage

Ich bin mir nicht ganz sicher, ob dies möglich ist, oder fällt das in die Kategorie der pivot-Tabellen, aber ich dachte, ich würde gehen, um die Profis zu sehen.

Ich habe drei grundlegende Tabellen:Karte, Eigentum und CardProperty.Da die Karten nicht die gleichen Eigenschaften haben, und oft mehrere Werte für die gleiche Eigenschaft, entschied ich mich für die union table-Ansatz, um Daten zu speichern, anstatt eine wirklich große Spalte Struktur in meinem Tisch.

Die Eigenschaft table-ist ein basic-Schlüsselwort/Wert-Typ-Tabelle.So haben Sie die keyword-ATK und der Wert zugewiesen.Es gibt eine andere Eigenschaft namens SpecialType, die eine Karte kann mehrere Werte, wie z.B. "Sycnro" und "DARK"

Was ich möchte zu tun ist, erstellen Sie eine Ansicht oder eine gespeicherte Prozedur, die mir die Karte Id, Karte den Namen und die Eigenschaft Stichwörter der Karte zugewiesen, als die Spalten und Ihre Werte in der Ergebnismenge für eine Karte angegeben.Also idealerweise hätte ich ein Ergebnis wie:

ID  NAME                   SPECIALTYPE
1   Red Dragon Archfiend   Synchro
1   Red Dragon Archfiend   DARK
1   Red Dragon Archfiend   Effect

und ich konnte tally meine Ergebnisse, dass Art und Weise.

Ich denke auch schlau wäre zu einfach verketten Sie die Eigenschaften zusammen, basierend auf Ihrem keyword, so könnte ich eine Ergebnismenge erzeugen, wie:

1  Red Dragon Archfiend   Synchro/DARK/Effect

..aber ich weiß nicht, ob das machbar ist.

Helfen Sie mir stackoverflow Kenobi!Du bist meine einzige Hoffnung.

Andere Tipps

Verwandte, aber die Werte sind die Werte, die gehalten werden in separaten Spalten, und Sie wissen, dass die "besonderen Arten" Kopf der Zeit:
SQL-Abfrage zu vergleichen, Produkt Verkäufe nach Monat

Sonst würde ich Sie hierzu mit dem cursor in eine gespeicherte Prozedur oder eine Vorform der Wandel in der business-oder presentation-layer.

Stich in sql wenn Sie wissen, alle Fälle:

Select
    ID,NAME
    ,Synchro+DARK+Effect --  add a some substring logic to trim any trailing /'s
from
    (select
        ID
        ,NAME
        --may need to replace max() with min().
        ,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro
        ,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK
        ,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect
    from
        table
    group by
       ID
       ,NAME) sub1

Nicht mit dem Zusammenbruch durch die Verkettung für die Lagerung von verwandten Datensätze in Ihrer Datenbank.Es ist nicht genau das die best practices.

Was Sie beschreiben, ist eine pivot-Tabelle.Pivot-Tabellen sind hart.Ich würde vorschlagen, Sie zu vermeiden, wenn überhaupt möglich.

Warum nicht einfach Lesen in Ihren zugehörigen Zeilen und verarbeiten diese im Speicher?Es klingt nicht wie Sie gehen, um verbringen zu viele Millisekunden das zu tun...

Eine option ist, um Eigenschaften, haben eine Art der Unterkunft, so:

table cards
integer ID | string name | ... (other properties common to all Cards)

table property_types
integer ID | string name | string format | ... (possibly validations)

table properties
integer ID | integer property_type_id | string name | string value
foreign key property_type_id references property_types.ID

table cards_properties
integer ID | integer card_id | integer property_id
foreign key card_id references cards.ID
foreign key property_id references propertiess.ID

So, wenn Sie wollen, um einen neuen Wert der Eigenschaft, Sie können überprüfen es durch seine Art.Eine Art könnte "SpecialType" mit einer Aufzählung von Werten.

Ich habe einen Typ/format für meine Tabelle mit den Eigenschaften, dass, wie ich weiß, wie zu cast/beurteilen, wenn ich es mit einem integer-Wert.Ich war mir nicht sicher, ob es relevant für dieses Problem sind oder nicht.

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