Webstatt.org - Community seit 2006 - 2012 (2024?)

Joins

user-343
08.05.2007 20: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. Fettes Grinsen

user-343
13.05.2007 10:58

Okay. Funktioniert doch nicht so ganz, wie ich will Fettes Grinsen

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?

user-343
14.05.2007 15:53

Naja. Egal. Selbst gelöst Fettes Grinsen

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 lächeln