Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: proszę o pomoc przy utworzeniu zapytania
Forum PHP.pl > Forum > Bazy danych
Arek00
mam takie tabele:

  1. -- Struktura tabeli dla `sklep_cennik`
  2.  
  3. `id_produktu` varchar(64) NOT NULL DEFAULT '',
  4. `kategoria` varchar(255) NOT NULL,
  5. `producent` varchar(64) NOT NULL DEFAULT '',
  6. `model` varchar(200) NOT NULL DEFAULT '',
  7. `cena` decimal(8,2) NOT NULL DEFAULT '0.00',
  8. `gwarancja` varchar(40) NOT NULL DEFAULT '',
  9. `kod_producenta` varchar(64) NOT NULL,
  10. `dostepnosc` varchar(2) NOT NULL DEFAULT 'N',
  11. `data` int(11) NOT NULL,
  12. PRIMARY KEY (`id_produktu`),
  13. KEY `kategoria` (`kategoria`),
  14. KEY `producent` (`producent`),
  15. KEY `model` (`model`),
  16. KEY `cena` (`cena`),
  17. KEY `dostepnosc` (`dostepnosc`),
  18. KEY `data` (`data`)
  19.  
  20. -- Struktura tabeli dla `opis_produktu`
  21.  
  22. `id_produktu` varchar(20) NOT NULL,
  23. `nazwa` varchar(255) NOT NULL DEFAULT '',
  24. `zdjecie` varchar(150) NOT NULL DEFAULT '',
  25. `opis` text collate NOT NULL,
  26. `fotka1` int(1) NOT NULL DEFAULT '0',
  27. `fotka2` int(1) NOT NULL DEFAULT '0',
  28. `fotka3` int(1) NOT NULL DEFAULT '0',
  29. PRIMARY KEY (`id_produktu`),
  30. KEY `fotka1` (`fotka1`)


potrzebuję wybrać 6 losowych produktów z takimi warunkami:

dostepnosc="T"
fotka1>0

zrobiłem takie zapytanie:

  1. SELECT * FROM sklep_cennik LEFT JOIN opis_produktu ON sklep_cennik.id_produktu = opis_produktu.id_produktu WHERE sklep_cennik.dostepnosc="T" AND opis_produktu.fotka1>0 ORDER BY rand() LIMIT 6


efekt jest taki:

Kod
id   select_type    table               type      possible_keys         key          key_len   ref                             rows    Extra
1    SIMPLE         sklep_cennik        range     PRIMARY,dostepnosc    dostepnosc   8         NULL                            8789    Using where; Using temporary; Using filesort
1    SIMPLE         opis_produktu       eq_ref    PRIMARY,fotka1        PRIMARY      62        sklep_cennik.id_produktu        1       Using where


czy da się jakoś te tabele połączyć tak żeby zmniejszyć ilość przetwarzanych wierszy?
Kalinowcyk
Spróbuj tak:

  1. SELECT sklep_cennik.* FROM sklep_cennik, opis_produktu
  2. WHERE sklep_cennik_id.produktu=opis_produktu.id_produktu AND sklep_cennik.dostepnosc='T' AND opis_produktu.fotka1>0 ORDER BY rand() LIMIT 6 ;
pionas
Cytat(Kalinowcyk @ 25.03.2009, 22:15:11 ) *
Spróbuj tak:

  1. SELECT sklep_cennik.* FROM sklep_cennik, opis_produktu
  2. WHERE sklep_cennik_id.produktu=opis_produktu.id_produktu AND sklep_cennik.dostepnosc='T' AND opis_produktu.fotka1>0 ORDER BY rand() LIMIT 6 ;



proponuję zamiast * użyć nazwy tych pól które faktycznie będą użyte, przyśpiesza to działanie winksmiley.jpg
Kalinowcyk
No na pewno, zrobiłem tak dlatego, że we wzorcowym zapytaniu też chodziło o wszystkie pola winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.