Vous êtes très proche. Vous devez joindre votre table clé/valeur itemproperties
une fois pour chaque clé distincte (propriété) que vous devez récupérer. Le fait est que vous devez utiliser LEFT JOIN
. JOIN
intérieur simple supprime la ligne de sortie lorsque le critère de jointure n'est pas rempli.
Essayez ceci.
SELECT i.ID as ItemID, i.Name as ItemName,
p1.Value AS Color, p2.Value AS Speed, p3.Value AS Price
FROM items as i
LEFT JOIN itemproperties AS p1 ON (i.ID=p1.ItemID) AND (p1.Name = 'Color')
LEFT JOIN itemproperties AS p2 ON (i.ID=p2.ItemID) AND (p2.Name = 'Speed')
LEFT JOIN itemproperties AS p3 ON (i.ID=p3.ItemID) AND (p3.Name = 'Price')
Les expressions sélectionnant le Name
valeurs (z.B. p3.Name = 'Price'
) allez dans votre ON
clause plutôt que votre WHERE
clause.