Jestem właśnie w trakcie tworzenia sklepu internetowego i mam pewien problem.
Baza danych składa się z następujących tabeli:
-- -- Struktura tabeli dla 'cechy' -- CREATE TABLE cechy ( id smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT, id_kategorii smallint(4) NOT NULL DEFAULT '0', nazwa varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; -- -------------------------------------------------------- -- -- Struktura tabeli dla 'cechy_dane' -- CREATE TABLE cechy_dane ( id_produktu smallint(6) NOT NULL DEFAULT '0', id_cechy smallint(6) NOT NULL DEFAULT '0', wartosc varchar(255) NOT NULL DEFAULT '' ) ENGINE=MyISAM DEFAULT CHARSET=latin2; -- -------------------------------------------------------- -- -- Struktura tabeli dla 'kategorie' -- CREATE TABLE kategorie ( id smallint(4) UNSIGNED NOT NULL AUTO_INCREMENT, nad_id smallint(4) NOT NULL DEFAULT '0', pozycja smallint(3) NOT NULL DEFAULT '0', nazwa varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; -- -------------------------------------------------------- -- -- Struktura tabeli dla 'producenci' -- CREATE TABLE producenci ( id smallint(4) UNSIGNED NOT NULL AUTO_INCREMENT, nazwa varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin2; -- -------------------------------------------------------- -- -- Struktura tabeli dla 'produkty' -- CREATE TABLE produkty ( id smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT, id_kategorii smallint(4) NOT NULL DEFAULT '0', id_producenta smallint(4) NOT NULL DEFAULT '0', nazwa varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
I teraz tak chciałbym wyświetlić takie rekordy z tabeli produkty których 'Pojemność dysku twardego' wynosi '80gb'.
Na razie mam następujące zapytanie:
SELECT p.*,pro.nazwa AS nazwa_producenta,kat.nazwa AS nazwa_kategorii FROM produkty p JOIN kategorie kat ON (p.id_kategorii = kat.id) JOIN producenci pro ON (p.id_producenta = pro.id) JOIN cechy c1 ON (kat.id = c1.id_kategorii) JOIN cechy_dane c2 ON (p.id = c2.id_produktu AND c1.id = c2.id_cechy)
Jak dodać instrukcje warunkową do tego zapytania, tak aby wybrać tylko rekordy, których dla przykładu 'Pojemność dysku twardego' wynosi '80gb'.
Poniżej daje zrzut bazy żebyście widzieli co aktualnie w niej jest:
-- -- Zrzut danych tabeli `cechy` -- INSERT INTO `cechy` VALUES (1, 1, 'Pojemność dysku twardego'); INSERT INTO `cechy` VALUES (2, 1, 'Przekątna ekranu'); -- -- Zrzut danych tabeli `cechy_dane` -- INSERT INTO `cechy_dane` VALUES (1, 1, '80 gb'); INSERT INTO `cechy_dane` VALUES (1, 2, '14.1"'); -- -- Zrzut danych tabeli `kategorie` -- INSERT INTO `kategorie` VALUES (1, 0, 0, 'Laptopy'); -- -- Zrzut danych tabeli `producenci` -- INSERT INTO `producenci` VALUES (1, 'Toshiba'); -- -- Zrzut danych tabeli `produkty` -- INSERT INTO `produkty` VALUES (1, 1, 1, 'HP Compaq nx6110');
Czekam na propozycje i pomoc.