Willkommen in der Webstatt Zum Webstatt Blog und Stories
Wasili am 08.05.07 22:35

Seit langem wieder ein MySQL-Problem. Ich habe 3 Tabellen:
Tabelle items_prot, mit den Feldern:
`itemid` => int auto_increment
`name` => varchar 255

Tabelle items_vendors_inventory mit den Feldern:
`inventid` => int auto_increment
`itemid` => Referenz zur Tabelle items_prot
`owner` => Besitzer-ID, referenziert mit items_vendorlist.vendorid

Tabelle items_vendorlist mit den Feldern
`vendorid` => int auto_increment
`vendorname` => varchar 255


Ich habe als einzige Angabe "items_vendorlist.vendorname".
Ich will nun alle items aus der Tabelle items_prot holen. Dabei soll die Tabelle mit der Tabelle items_vendors_inventory verknüpft werden über die itemid, sofern vorhanden. In der zu verknüpfenden Tabelle (items_vendor_inventory) gibt es das Feld owner, das mit einem Namen zusammen in der Tabelle items_vendorlist steht, wobei ich nicht die ID kenne, sondern nur den Namen.
Nach rumprobieren hab ich einen Join mit Subquery gemacht, der auch so funktioniert, wie ich will:

SELECT
prot.`name` AS 'Name',
prot.`desc` AS 'Beschreibung',
prot.`value1` AS 'Stärke',
prot.`price` AS 'Preis',
inv.`inventid` AS 'Inventar-ID'
FROM
`items_prot` prot
LEFT OUTER JOIN
`items_vendor_inventory` inv
ON
prot.itemid = inv.itemid
WHERE
prot.class1 = "Waffe" AND (
inv.owner = (
SELECT
vendorid
FROM
items_vendorlist
WHERE
vendorname='market_greatbasle::weapon'
) OR
inv.owner IS NULL
)


Nun wollte ich wissen, ob das das "schönste" ist, oder es noch eine schönere Möglichkeit gibt. :D

netcup.de Warum gibt es hier Werbung?
Wasili am 13.05.07 12:58

Okay. Funktioniert doch nicht so ganz, wie ich will :D

Sobald es ein Item aus items_prot in der Tabelle items_vendor_inventory gibt, dessen Besitzer NICHT der gewollte ist, und der gewollte Besitzer das Item NICHT besitzt, erfasst der Query dieses Item nicht!

Irgendwelche Lösungsvorschläge? =/ Kann man das überhaupt mit SQL machen, oder muss ich PHP dazu gebrauchen?

Wasili am 14.05.07 17:53

Naja. Egal. Selbst gelöst :D

SELECT
prot.`itemid` AS 'Item-ID',
prot.`name` AS 'Name',
prot.`desc` AS 'Beschreibung',
prot.`value1` AS 'Stärke',
prot.`price` AS 'Preis',
inv.`inventid` AS 'Inventar-ID',
inv.`owner` AS 'Besitzer-ID'
FROM
`items_prot` prot
LEFT OUTER JOIN
`items_vendor_inventory` inv
ON
prot.itemid = inv.itemid AND
inv.owner = (
SELECT
`vendorid`
FROM
`items_vendorlist`
WHERE
vendorname='market_greatbasle::weapon'
)
WHERE
prot.class1 = 'Waffe'


Funktioniert perfekt :)

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt