Hallo
Ich habe eine Datenbank wie folgt:
Der Inhalt der Datenbank sieht dann so aus:
Ich habe also verschiedene Produkte mit verschiedenen Eigenschaften (features).
Das Produkt 'Hose' hat beispielsweise gar keine Eigenschaft.
Ein Produkt(3,'Schuh') hat zwei verschiedenen Eigenschaften ('Farbe').
Nun möchte ich alle Produkte ausgeben, welche die Eigenschaft 'Farbe' NICHT haben.
Es sollte mir also folgende Produkte ausgeben:
4: Sofa
5: Hose
Wie bewerkstellige ich das?
Ist das nur mit einem Subselect möglich?
Ich habe eine Datenbank wie folgt:
Code:
CREATE TABLE IF NOT EXISTS `features` ( `id` int(11) NOT NULL AUTO_INCREMENT, `feature` varchar(255) NOT NULL, `value` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; INSERT INTO `features` (`id`, `feature`, `value`) VALUES (1, 'Farbe', 'Rot'), (2, 'Farbe', 'Grau'), (3, 'Material', 'Leder'), (4, 'Breite', '210cm'), (5, 'Farbe', 'Blau'); CREATE TABLE IF NOT EXISTS `prod2feat` ( `prod_id` int(11) NOT NULL, `feat_id` int(11) NOT NULL, KEY `prod_id` (`prod_id`,`feat_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `prod2feat` (`prod_id`, `feat_id`) VALUES (1, 1), (2, 1), (2, 3), (3, 2), (3, 5), (4, 4); CREATE TABLE IF NOT EXISTS `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; INSERT INTO `products` (`id`, `name`) VALUES (1, 'Auto'), (2, 'Schuh'), (3, 'Schuh'), (4, 'Sofa'), (5, 'Hose');
Code:
SELECT * FROM `products` LEFT JOIN `prod2feat` ON `products`.`id` = `prod2feat`.`prod_id` LEFT JOIN `features` ON `prod2feat`.`feat_id` = `features`.`id`
Das Produkt 'Hose' hat beispielsweise gar keine Eigenschaft.
Ein Produkt(3,'Schuh') hat zwei verschiedenen Eigenschaften ('Farbe').
Nun möchte ich alle Produkte ausgeben, welche die Eigenschaft 'Farbe' NICHT haben.
Es sollte mir also folgende Produkte ausgeben:
4: Sofa
5: Hose
Wie bewerkstellige ich das?
Ist das nur mit einem Subselect möglich?

Kommentar