mam takie tabele:
-- 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
czy da się jakoś te tabele połączyć tak żeby zmniejszyć ilość przetwarzanych wierszy?