Avatarus
17.07.2009, 16:01:22
Witam
Mam problem z zoptymalizowaniem pewnego algorytmu
Sytuacja jest taka:
W tabeli jest pole nazwa, na które składa się nazwa produktu jego kolor i rozmiar. jest to jako jeden string
np.
"ABIE blue 34"
I teraz jak wchodzi się na dany produkt w sklepie pod obrazkiem i opisem pokazują się lista produktów z tego samego modelu
czyli np:
"Abie blue 36"
"Abie red 34"
itd.
Teraz cały pis pogrzebany w tym że potrzeba przy tej liście zrobić przy każdym produkcie zrobić obrazek z prezentacją koloru.
Czyli np przed ABIE red 34 mały obrazek 68x18 w kolorze czerwonym.
Kolor jest pobierany z nazwy produktu przez funkcje strstr()
Problem jest taki że tych kolorów jest około 600....i jeśli skrypt za każdą pętlą która wyświetla produkt na liście ma badać 600 warunków żeby przypisać obrazek to serwer szlag trafi....
Jak byście to inaczej rozwiązali?
Od razu mówię że modyfikacja bazy danych odpada....z tego względu że pracujemy na aplikacji shoper.pl które nie jest mi aż tak dobrze znana a poza tym jak to zmienię i dodam sobie np kolumnę z nazwą koloru to jak potem będę importować produktu ( co robię codziennie), albo będę robić aktualizację sklepu (co jakiś czas wychodzą łatki) to może się nieźle namieszać.
może padniecie na coś lepszego co tak nie będzie zabijać serwera.
erix
17.07.2009, 16:05:27
Cytat
Od razu mówię że modyfikacja bazy danych odpada....z tego względu że pracujemy na aplikacji shoper.pl które nie jest mi aż tak dobrze znana
W tym skrypcie aż strach zmieniać... ;/
Cytat
może padniecie na coś lepszego co tak nie będzie zabijać serwera.
Jeśli chodzi o shopera, to trzeba by było chyba przepisać skrypt, który odpowiada właśnie za obrazki (uniemożliwia on bezpośrednie wyświetlanie przez serwer).
Cytat
Problem jest taki że tych kolorów jest około 600....i jeśli skrypt za każdą pętlą która wyświetla produkt na liście ma badać 600 warunków żeby przypisać obrazek to serwer szlag trafi....
Trochę nie zrozumiałem? 600 rodzajów dla każdego buta?
To nie można by było zrobić tablicy z kolorami...? Ew. kwadracik z kolorem + styl.
Uściślij nieco.
Avatarus
17.07.2009, 21:10:28
każdy produkt może mieć zasadniczo jeden z 600 ogólnych z góry zdefiniowanych kolorów (bo występują też mixy kolorów ale są one liczone jako jeden np pomarańczowo/czarny
przykład tego można zobaczyć tutaj:
http://sklep.hannah.pl/APACHE_SUMMER_2009_...aven_-9207.html(widze ze coś źle zgrane i jeden obrazek za mały ale to sie poprawi).
Kilka kolorów dodałem tak jak to opisałem wcześniej, ale dodawać wszystkie 600...masakra

Ściślej:
jest 600 kolorów i każdy ma swoja nazwę,
są produkty i w każdej nazwie produktu znajduje się nazwa koloru która jest szukana opcją strstr
jeśli w nazwie znajdzie się ta nazwa koloru to ładowany jest jego obrazek
Cos jeszcze wyjasnić?
scanner
17.07.2009, 21:29:13
A ten sklep t onie ma atrybutów dla produktów?
Przecież tu jest podstawowy błąd logiczny zrobiony - z artybutów powinno się generować nazwę, a nie z nazwy wyciągać atrybuty.
maly_swd
17.07.2009, 21:34:14
tak jak powiedzial kolega:
zrobic tablice z kluczami i wartoscia koloru, a potem przez div ze stylem to wyswietlac;
$kolor['blue']='0000ff'
$kolor['red']='ff0000'
$kolor['green']='00ff00'
$kolor['black']='000000'
i teraz echo "<div style='width:10px; height: 10px; background-color: #".$kolor[tu to co przez substr wyciagasz].";'></div>
*tablice specjalnie zapisalem tak aby ladniej wygladalo;)
dr_bonzo
17.07.2009, 21:39:15
@scanner: to jest shopper

kropka

@Avatarus: tak jak ci maly_swd pokazal - tablica + wyciagniecie nazwy koloru z nazwy produktu
Avatarus
17.07.2009, 22:45:35
fakt rozwiązanie wydaje się być logiczniejsze, nie trzeba ileś tam razy sprawdzać koloru i potem go dopasowywać.
dlatego lubię to forum, konkretni ludzie , szybkie myślenie
Dzięki
erix
17.07.2009, 23:00:58
~dr_bonzo:
Cytat
A ten sklep t onie ma atrybutów dla produktów?
Tak się składa, że akurat ma; w domyślnej instalacji nawet. ;p Ale to nie zmienia faktu, że to wciąż Sho
per.
Avatarus
22.07.2009, 14:22:26
ma atrybuty ale strasznie to mozolne.
nie da się np zobić modelu....każdy produkt tam traktowany jest jak coś totalnie osobnego.
to mnie drażni....
nie można zrobić modelu, podzielić go na kolory i rozmiary....strasznie źle przystosowany do tej branży jest.
jednak klops...teraz się za to zabrałem ale zapomniałem powiedzieć o jednym fakcie
Kolor nie jest położony na jakieś konkretnej pozycji
W bazie wygląda to tak:
Abie blue 34
Noresund Red XL
Wrapper Antracite S
Jak widać nie da się jasno określić gdzie zaczyna się kolor
W takim wypadku cały algorytm małego_swd przestaje być przydatny.
Jak byście sobie inaczej z tym problemem poradzili?
erix
22.07.2009, 14:31:08
Avatarus
22.07.2009, 14:54:25
też nie da rady bo są takie produkty jak Thin Air Mandarin

gdzie "Thin Air" to nazwa modelu a mandarin to kolor
Nie mogę wymyślić jak to optymalnie ugryźć.
erix
22.07.2009, 15:06:28
No sory, to zostaje tabela/tablica z nazwami produktów + kolory.
Albo korzystasz z "atrybuty" w shoperze i jakoś do tego dopinasz.
Avatarus
22.07.2009, 15:39:28
jedyne co przychodzi mi do głowy to zmuszenie admina poprzedniego poprzedniego sklepu (zintegorwany z systemem magazynowym który używamy do dziś) żeby zrobił mi listę produktów w postaci:
Kod produktu | Kolor
Kod produktu jest unikalny na poziomie modelu, koloru i rozmiaru.
Kolory w poprzedniej aplikacji są w osobnej komórce więc nie będzie chyba problemu.
Wtedy jak będzie już taka lista to zrobi się z tego tablicę $kolor[kod_produktu]="_kolor_" i powinno działać.
ADeM
22.07.2009, 15:59:35
A nie możesz wziąć przedostatniej wartości z tablicy po explode?
Avatarus
22.07.2009, 16:03:39
a jak? skoro ciągi nie są jasno rozgraniczone.
Nie wiem jak napisać skrypt który jest w stanie z tych 2 przykładowych ciągów wyciągnąć kolor:
Abie Red 34
Thin Air Blue ==
Gdzie Abie i Thin Air to mode, Red i Blue to kolor a 34 i == to rozmiar (== oznacza że nie ma rozmiaru bo jest produkowany tylko w jednym rozmiarze)
ADeM
22.07.2009, 16:08:51
<?php
$tekst = 'Thin Air Blue ==';
$ilosc = count( $tablica ); echo $tablica[ $ilosc-2
]; ?>
Avatarus
22.07.2009, 16:24:46
w rezultacie zmienna ta wypluje "Thin" o ile się nie mylę, a to mi niestety nic nie daje.
ADeM
22.07.2009, 16:25:26
W rezultacie wypluje "Blue"... Sprawdź krok po kroku co robi mój kod.
Avatarus
22.07.2009, 16:31:53
racja..ale tak jak mówiłem kilka postów wyżej.
Model może się składać z 2 a nawet 3 wyrazów, ale nie musi.
Mamy modele np:
Troll
Wrapper
Free and Mad
Target S
Thin Air
z tego powodu dzielenie przez exploda po spacji nic nie da moim zdaniem.
#luq
22.07.2009, 19:28:36
Nie rozumiem w czym problem. Jeśli masz wszystkie rekordy wpisane w taki sposób
Kod
[model (może być kilka wyrazów)] [kolor] [rozmiar]
Kolor jest ciągiem od przedostatniej spacji do ostatniej.
Avatarus
22.07.2009, 19:31:53
niestety też nie.
kolor może miec spacje jest kolor kolor który się nazywa np "green hell" albo "mandarin red"
lukada
22.07.2009, 19:35:09
Chyba naprawdę nie pozostaje Ci nic innego jak przebudować bazę danych. Bo to przecież jest jeden wielki bałagan, nie rozumiem, jak można było ją tak napisać.
scanner
22.07.2009, 19:35:18
Człowieku, ile ty zarabiasz, ze się takim gównem opłaca Ci się babrać?
Przecież to jest niepotrzebne marnowanie zasobów - od co najmniej pięciu dni nie można znaleźć sensownego rozwiązania - toż to paranoja jakaś.
Avatarus
22.07.2009, 19:40:52
sęk w tym że płaca dobra

no nic zrobie to chyba tak że skrypt będzie pobierał z bazy po 50 rekordów, przepuszczę to przez sprawdzanie czy dany string zawiera wartość "kolor" jak tak to właduje id produktu do osobnej tabeli wraz z przypisanym kolorem, potem połączy się to przy wyświetlaniu produktu...tak będzie chyba najprościej
maly_swd
22.07.2009, 20:32:33
tak jak Erix napisal EXPLODE PO SPACJACH i wyjdzie Ci tablica
Thin
Air
Blue
sprawdzasz w petli czy klucz z tabliczy jest w tablicy z kolorami jak jest to znaczy ze to kolor;) i dalej jedziesz moim sposobem:)
erix
22.07.2009, 20:37:29
Ale to nie zmienia faktu, że trzeba wszystkie trzy
ADeM
22.07.2009, 20:59:45
Ewentualnie, jeśli naprawde chcesz zrobić tak jak mówiłeś, to lepiej będzie chyba "przeleciec" po bazie usuwając spacje z nazw kolorów. Dodatkowo, jeśli wymagane, to zmienić też w kodzie. Dalej tak jak pisał Erix.
maly_swd
23.07.2009, 20:53:40
Erix, tak masz racje ze trzeba...
Jest pare rozwiazan lepszych i gorszych.. a jakie zastosuje autor to juz jego wybor;)
Najlatwiej to dodac kolumne z kolorem:) i smigac;)
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.