-- Struktura tabeli dla `sklep_cennik` `id_produktu` varchar(64) NOT NULL DEFAULT '', `kategoria` varchar(255) NOT NULL, `producent` varchar(64) NOT NULL DEFAULT '', `model` varchar(200) NOT NULL DEFAULT '', `cena` decimal(8,2) NOT NULL DEFAULT '0.00', `gwarancja` varchar(40) NOT NULL DEFAULT '', `kod_producenta` varchar(64) NOT NULL, `dostepnosc` varchar(2) NOT NULL DEFAULT 'N', `data` int(11) NOT NULL, PRIMARY KEY (`id_produktu`), KEY `kategoria` (`kategoria`), KEY `producent` (`producent`), KEY `model` (`model`), KEY `cena` (`cena`), KEY `dostepnosc` (`dostepnosc`), KEY `data` (`data`) -- Struktura tabeli dla `opis_produktu` `id_produktu` varchar(20) NOT NULL, `nazwa` varchar(255) NOT NULL DEFAULT '', `zdjecie` varchar(150) NOT NULL DEFAULT '', `opis` text collate NOT NULL, `fotka1` int(1) NOT NULL DEFAULT '0', `fotka2` int(1) NOT NULL DEFAULT '0', `fotka3` int(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id_produktu`), KEY `fotka1` (`fotka1`)
potrzebuję wybrać 6 losowych produktów z takimi warunkami:
dostepnosc="T"
fotka1>0
zrobiłem takie zapytanie:
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
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?