[MySQL]

cola1

Mitglied
Hallo,

stehe gerade vor einer Abfrage die mich überfragt...

Habe für ein Browsergame nun die Tabellen für Items angelegt:

Items

Tabelle: items
Spalten: itemID, itemTypeID, itemName, neededLevel
Beispiel: 1, 1, Einfaches Schwert, 1

Tabelle: item_attributes
Spalte: itemID, attributID, attributAmount
Beispiel: 1, 20, 2

Tabelle: item_currencies
Spalte: itemID, currencyID, currencyAmount
Beispiel: 1, 1, 10

Tabelle: item_types
Spalte: itemTypeID, itemTypeName
Beispiel: 1, Schwert

Worauf noch zugegriffen wird

Tabelle: attributes
Spalte: attributID, attributName, attributDescription
Beispiel: 20, Schaden, Schaden macht Schaden...

Tabelle: currencies
Spalte: currencyID, currencyName, currencyRate
Beispiel: 1, Kupfer, 100

Wer die Items verkauf

Tabelle: npcs
Spalte: npcID, npcTypeID, npcName, npcDescription
Beispiel: 1, 1, Rudolf, Rudolf der Waffenhändler...

Tabelle: npc_items
Spalte: npcID, itemID
Beispiel: 1, 1

Tabelle: npc_types
Spalte: npcTypeID, npcTypeName
Beispiel: 1, Händler


Soviel zu den ganzen Tabellen... Was ich ausgeben möchte sind die Items eines Händlers. Einfach, nicht?
Das heißt ich bin bei Händler X und möchte seine Waren passend zu meinem Level (PHP dann) sehen. Nun wird mir schon ganz schwindelig, wenn ich daran denke wie ich die ganzen einzelnen Werte zusammen bekommen soll :O

Ein Item hat einen Namen, okay. Als nächstes wird der dazu passenden ID ein Preis zugewiesen. Der Preis und die ID zu der dazu passenden Währung steht wieder in einer anderen Tabellen. Ebenso ist es mit den Attributen. Die Menge der Attribute in einer Tabellen, der passende Name zu einer AttributID wieder in anderen Tabellen.

Muss man hier zig mal JOINEN, oder es doch etwas härter coden und einzelne Abfragen starten? Könnte mir dann vorstellen, dass ich für alle Namen der Attribute, Währungen usw. einzelne Abfragen machen muss?!

Bin schlichtweg noch nicht so weit und habe keine Ahnung wo ich anfangen soll. Könnt Ihr mir helfen? Bei fehlenden Infos einfach Fragen :)
 
Zuletzt bearbeitet:
Falls einem das Lesen aufgrund der Farben auf den Senkel gehen sollte :) :


Items

Tabelle: items
Spalten: itemID, itemTypeID, itemName, neededLevel
Beispiel: 1, 1, Einfaches Schwert, 1

Tabelle: item_attributes
Spalte: itemID, attributID, attributAmount
Beispiel: 1, 20, 2

Tabelle: item_currencies
Spalte: itemID, currencyID, currencyAmount
Beispiel: 1, 1, 10

Tabelle: item_types
Spalte: itemTypeID, itemTypeName
Beispiel: 1, Schwert

Worauf noch zugegriffen wird

Tabelle: attributes
Spalte: attributID, attributName, attributDescription
Beispiel: 20, Schaden, Schaden macht Schaden...

Tabelle: currencies
Spalte: currencyID, currencyName, currencyRate
Beispiel: 1, Kupfer, 100

Wer die Items verkauf

Tabelle: npcs
Spalte: npcID, npcTypeID, npcName, npcDescription
Beispiel: 1, 1, Rudolf, Rudolf der Waffenhändler...

Tabelle: npc_items
Spalte: npcID, itemID
Beispiel: 1, 1

Tabelle: npc_types
Spalte: npcTypeID, npcTypeName
Beispiel: 1, Händler
 
Hallo cola1,

also es ist nicht grad einfach aufgrund der Menge der Tabellen den Zusammenhang richtig zu erfassen, seis auch etwas meiner Lesefaulheit geschuldet.

Aber bei aller Normalisierung kann mans vieleicht auch zusammenfassen. Bei Tabelle: item_types hat itemTypeID den selben Wert wie itemID. Wenn du diese ID überall nutzen kannst könnte ich dir ein Bsp Join zeigen.

Bsp gibt dir anhand der Variable $itemID alle Daten aus den gejointen Tabellen:
SQL:
           SELECT
				itemID.Id,
				items.*,
				item_attributes.*,
				item_currencies.*
			FROM
				(SELECT '{$itemID}' AS Id) AS itemID
			LEFT JOIN items
				ON items.itemID = itemID.Id
			LEFT JOIN item_attributes
				ON item_attributes.itemID = itemID.Id
			LEFT JOIN item_currencies
				ON item_currencies.itemID = itemID.Id

Meine Kenntnisse was Joins betrifft sind leider auch noch begrenzt aber vieleicht hilft es dir oder jemand der hier helfen möchte ein Stück weiter.

Gruss Joe.
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück