Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane zapytanie., Nie wiem jak zrobić filtr.
jasina
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 16.10.2004

Ostrzeżenie: (0%)
-----


Witam serdecznie

Jestem właśnie w trakcie tworzenia sklepu internetowego i mam pewien problem.

Baza danych składa się z następujących tabeli:

  1. --
  2. -- Struktura tabeli dla 'cechy'
  3. --
  4.  
  5. CREATE TABLE cechy (
  6. id smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  7. id_kategorii smallint(4) NOT NULL DEFAULT '0',
  8. nazwa varchar(50) NOT NULL DEFAULT '',
  9. PRIMARY KEY (id)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  11.  
  12. -- --------------------------------------------------------
  13.  
  14. --
  15. -- Struktura tabeli dla 'cechy_dane'
  16. --
  17.  
  18. CREATE TABLE cechy_dane (
  19. id_produktu smallint(6) NOT NULL DEFAULT '0',
  20. id_cechy smallint(6) NOT NULL DEFAULT '0',
  21. wartosc varchar(255) NOT NULL DEFAULT ''
  22. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  23.  
  24. -- --------------------------------------------------------
  25.  
  26. --
  27. -- Struktura tabeli dla 'kategorie'
  28. --
  29.  
  30. CREATE TABLE kategorie (
  31. id smallint(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  32. nad_id smallint(4) NOT NULL DEFAULT '0',
  33. pozycja smallint(3) NOT NULL DEFAULT '0',
  34. nazwa varchar(50) NOT NULL DEFAULT '',
  35. PRIMARY KEY (id)
  36. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  37.  
  38. -- --------------------------------------------------------
  39.  
  40. --
  41. -- Struktura tabeli dla 'producenci'
  42. --
  43.  
  44. CREATE TABLE producenci (
  45. id smallint(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  46. nazwa varchar(50) NOT NULL DEFAULT '',
  47. PRIMARY KEY (id)
  48. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  49.  
  50. -- --------------------------------------------------------
  51.  
  52. --
  53. -- Struktura tabeli dla 'produkty'
  54. --
  55.  
  56. CREATE TABLE produkty (
  57. id smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  58. id_kategorii smallint(4) NOT NULL DEFAULT '0',
  59. id_producenta smallint(4) NOT NULL DEFAULT '0',
  60. nazwa varchar(50) NOT NULL DEFAULT '',
  61. PRIMARY KEY (id)
  62. ) 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:

  1. SELECT p.*,pro.nazwa AS nazwa_producenta,kat.nazwa AS nazwa_kategorii
  2. FROM produkty p
  3. JOIN kategorie kat ON (p.id_kategorii = kat.id)
  4. JOIN producenci pro ON (p.id_producenta = pro.id)
  5. JOIN cechy c1 ON (kat.id = c1.id_kategorii)
  6. 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:

  1. --
  2. -- Zrzut danych tabeli `cechy`
  3. --
  4.  
  5. INSERT INTO `cechy` VALUES (1, 1, 'Pojemność dysku twardego');
  6. INSERT INTO `cechy` VALUES (2, 1, 'Przekątna ekranu');
  7.  
  8. --
  9. -- Zrzut danych tabeli `cechy_dane`
  10. --
  11.  
  12. INSERT INTO `cechy_dane` VALUES (1, 1, '80 gb');
  13. INSERT INTO `cechy_dane` VALUES (1, 2, '14.1"');
  14.  
  15. --
  16. -- Zrzut danych tabeli `kategorie`
  17. --
  18.  
  19. INSERT INTO `kategorie` VALUES (1, 0, 0, 'Laptopy');
  20.  
  21. --
  22. -- Zrzut danych tabeli `producenci`
  23. --
  24.  
  25. INSERT INTO `producenci` VALUES (1, 'Toshiba');
  26.  
  27. --
  28. -- Zrzut danych tabeli `produkty`
  29. --
  30.  
  31. INSERT INTO `produkty` VALUES (1, 1, 1, 'HP Compaq nx6110');


Czekam na propozycje i pomoc.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:40