artykuly:
CODE
+----+--------------+---------+-------+-------+-----------+
| id | data_dodania | aktywne | tytul | tresc | kategoria |
+----+--------------+---------+-------+-------+-----------+
| id | data_dodania | aktywne | tytul | tresc | kategoria |
+----+--------------+---------+-------+-------+-----------+
wykupione_artykuly:
CODE
+----+--------+---------+------+
| id | art_id | user_id | data |
+----+--------+---------+------+
| id | art_id | user_id | data |
+----+--------+---------+------+
kod sql
SELECT * FROM artykuly AS a WHERE a.aktywne=1 AND NOT EXISTS (SELECT wa.id FROM wykupione_artykuly AS wa WHERE wa.user_id=25 AND wa.oferta_id=a.id) AND (a.data_dodania BETWEEN '2011-10-24 0:00:00' AND '2011-10-25 0:00:00') AND a.kategoria = '1' GROUP BY a.id ORDER BY a.id DESC LIMIT 0,20
Pierwsza tabela zawiera artykuły, druga listę wykupionych przez użytkownika artykułów (do których ma dostęp).
Zadaniem tego kodu jest pobranie listy artykułów niewykupionych przez użytkownika (te które może wykupić)
Problemem jest bardzo niska wydajność tego zapytania. przy kilku tysiącach artykułów wydajność jest niestety niska. Czy jest jakaś inna metoda (oprócz NOT IN bo tu wydajność jest niewiele lepsza) aby wydajnie pobrać te same rekordy
