Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] produkty sugerowane
Karen
post 28.06.2013, 17:16:49
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 23.10.2006

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


Witam,
mam pytanie do odnośnie optymalizacji zapytania / funkcji.
Otóż potrzebuję zrobić w sklepie sugerowane produkty dla tych które zostały wcześniej zakupione.
Moje zapytanie wygląda tak:

  1. SELECT * FROM `produkty` WHERE `produkt_id` IN (SELECT `cart_pid` FROM `cart` WHERE `cart_ucode` IN
  2. (SELECT `cart_ucode` FROM `cart` WHERE `cart_pid` = '$id' GROUP BY `cart_ucode`)
  3. AND `cart_pid` <> '$id' AND cart_orderid<>'' GROUP BY `cart_pid` ORDER BY count(cart_pid) DESC) LIMIT 3

Prostymi słowy: pobiera koszyki (wszystkie produkty są w koszyku - nawet te już kupione) gdzie był dany produkt i wyświetla 3 inne posortowane częstością kupienia.
Niestety przy 100 produktach w sklepie, a 1000 w koszykach zapytanie zaczyna bardzo zamulać.

Czy mogę to jakoś zoptymalizować lub możecie poradzić jak sami z taką funkcją sobie poradziliście?

Z góry dzięki za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
ajlowju
post 29.06.2013, 13:26:18
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.05.2013

Ostrzeżenie: (10%)
X----


a jestes pewien, że to zapytanie zamula? tzn. konkretnie zapytanie z bazy?
Go to the top of the page
+Quote Post
gothye
post 29.06.2013, 16:43:48
Post #3





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


korzystaj z EXPLAIN do debugowania zapytań SQL exclamation.gif


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
Karen
post 29.06.2013, 16:56:00
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 23.10.2006

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


Tak, na 100% to to zapytanie. Jak wyczyszczę koszyk to wszystko działa płynnie.
Z drugiej strony jak właśnie było to 1000 rekordów to pierwsze wywołanie tego zapytania trwało 7sek (dosłownie), a po wykonaniu tego samego zapytania ponownie (przy tym samym ID) wykonywało się od razu. Przypuszczam, że wtedy wczytuje z cachu mysqlowego.

EXPLAIN i profilowanie nic nie dawało, bo wrzucając to zapytanie przez phpmyadmina wyskakiwał biały ekran.

Przy show profile for query wyskakuje tysiące małych pakietów(?). Każde po ułamek sekundy, ale razem składają się na te 7 sek.

Sam serwer stoi na konkretnej maszynie i raczej nie jest to problem sprzętowy.
Go to the top of the page
+Quote Post
bpskiba
post 30.06.2013, 06:45:45
Post #5





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Tak napisane zapytanie musi powodować problemy!
Zacznij je pisać od nowa. Nie używaj również gwiazdki, a wymień nazwy pól
Twoje zapytanie będzie się zaczynać tak

  1. SELECT product_id FROM produkty
  2. JOIN cart ON......


w tym zapytaniu NIE BĘDZIE frazy ... IN (SELECT...
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:02