0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)) AS tow_promocja, '. 'IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) AS tow_cena '. 'FROM towary,producenci'; // Typ wyszukiwania = 1 - przeglądanie działu/poddziału if ($search_typ==1) { $kat_idPoddzialu = 0; $wynik = baza_zapytanie($baza_polaczenie, 'SELECT kat_nazwa, kat_parentId FROM katalog WHERE kat_id='.$search_co); if (mysql_num_rows($wynik)>0) { $search_szukanyTekst = mysql_result($wynik,0,0); // Jeśli parentId jest różny od 0 if (mysql_result($wynik,0,1)!=0) { $kat_idPoddzialu = $kat_id; // Pobieramy id działu głównego (pierwszego poziomu) - to np. po to gdy wciśniemy na poddział na 4 poziomie to żeby zaznaczył w którym dziale głównym jesteśmy $kat_id = pobierzIdDzialuGlownego(mysql_result($wynik,0,1)); } } $listaDzialow = pobierzListeIdPoddzialow($search_co).$search_co; $zapytanie .= ', kat_tow WHERE (tow_aktywny=1) AND (prd_id=tow_prdid) AND (tow_id=kt_towid) AND (kt_katid IN ('.$listaDzialow.'))'; $zapytanieCount = 'SELECT COUNT(DISTINCT tow_id) FROM towary, kat_tow WHERE (tow_aktywny=1) AND (tow_id=kt_towid) AND (kt_katid IN ('.$listaDzialow.'))'; } elseif ($search_typ==2) { $search_szukanyTekst = $search_co; /////////////////////////////////////////// if ($search_dzial != 0) { $listaDzialow = pobierzListeIdPoddzialow($search_dzial).$search_dzial; $zapytanie .= ', kat_tow WHERE (tow_aktywny=1) AND (prd_id=tow_prdid) AND (tow_id=kt_towid) AND (kt_katid IN ('.$listaDzialow.'))'; $zapytanieCount = 'SELECT COUNT(DISTINCT tow_id) FROM towary, producenci, kat_tow WHERE (tow_aktywny=1) AND (prd_id=tow_prdid) AND (tow_id=kt_towid) AND (kt_katid IN ('.$listaDzialow.'))'; } else { $zapytanie .= ', kat_tow WHERE (tow_aktywny=1) AND (prd_id=tow_prdid) AND (tow_id=kt_towid)'; //$zapytanie .= ' WHERE (prd_id=tow_prdid)'; $zapytanieCount = 'SELECT COUNT(DISTINCT tow_id) FROM towary, producenci, kat_tow WHERE (tow_aktywny=1) AND (prd_id=tow_prdid) AND (tow_id=kt_towid)'; //$zapytanieCount = 'SELECT COUNT(DISTINCT tow_id) FROM towary, producenci WHERE (prd_id=tow_prdid)'; } /////////////////////////////////////////// if ($search_producent != 0) { $temp = ' AND (tow_prdid='.$search_producent.')'; $zapytanie .= $temp; $zapytanieCount .= $temp; } /////////////////////////////////////////// $temp = ''; switch ($search_cena) { case 1: // 0 - 10 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 0 AND 10 )'; break; case 2: // 10 - 20 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 10 AND 20)'; break; case 3: // 20 - 30 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 20 AND 30)'; break; case 4: // 30 - 40 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 30 AND 40)'; break; case 5: // 40 - 50 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 40 AND 50)'; break; case 6: // 50 - 100 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 50 AND 100)'; break; case 7: // 100 - 200 PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) BETWEEN 100 AND 200)'; break; case 8: // 200 - i więcej PLN $temp = ' AND (IF(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)),(CASE WHEN tow_promocjatyp=2 THEN tow_cenabrutto-tow_promocjacena WHEN tow_promocjatyp=3 THEN ROUND(tow_cenabrutto*(1-tow_promocjacena*0.01),2) ELSE tow_promocjacena END),tow_cenabrutto) >= 200)'; break; } $zapytanie .= $temp; $zapytanieCount .= $temp; /////////////////////////////////////////// $temp = ''; if (($search_nowosci==1) && ($search_promocje==0) && ($search_wyprzedaze==0)) { $temp = ' AND ((tow_nowosc=1) AND (CURRENT_DATE BETWEEN tow_nowoscod AND tow_nowoscdo))'; } elseif (($search_nowosci==1) && ($search_promocje==0) && ($search_wyprzedaze==1)) { $temp = ' AND ( ((tow_nowosc=1) AND (CURRENT_DATE BETWEEN tow_nowoscod AND tow_nowoscdo)) || '. '(((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)) AND (tow_wyprzedaz=1)))'; } elseif (($search_nowosci==1) && ($search_promocje==1)) { $temp = ' AND ( ((tow_nowosc=1) AND (CURRENT_DATE BETWEEN tow_nowoscod AND tow_nowoscdo)) || '. '((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado)) )'; } elseif (($search_nowosci==0) && ($search_promocje==0) && ($search_wyprzedaze==1)) { $temp = 'AND ((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado) AND (tow_wyprzedaz=1))'; } elseif (($search_nowosci==0) && ($search_promocje==1)) { $temp = 'AND ((tow_promocjatyp>0) AND ((tow_promocjakiedy=0) OR (tow_promocjakiedy=DAYOFWEEK(CURRENT_DATE))) AND (CURRENT_DATE BETWEEN tow_promocjaod AND tow_promocjado))'; } $zapytanie .= $temp; $zapytanieCount .= $temp; /////////////////////////////////////////// if (strlen($search_co)>0) { /* Przeszukiwanie odbywa się za pomocą mechanizmów bazy danych, * więc należy poprzedzić takie znaki jak \, ', " znakami backslash'a. * To samo dotyczy znaków '%' i '_' gdyż użyjemy LIKE w zapytaniu */ $tekst = addslashes($search_co); // Użyłem str_replace zamiast ereg_replace bo chodzi szybciej /* LIKE jest w MySQL dość specyficzny - jak szukamy znaku '\' to musimy * wpisać '\\\\' - pisało jakoś tak, że pierwsze dwa backslash'e wytnie * parser, drugie zostaną usunięte przy dopasowywaniu wyrażenia. * * W naszym przypadku addslashes() do znaku '\' dodał już drugi znak '\' * więc teraz należy zastąpił ten '\\' ciągiem '\\\\'. */ $tekst = str_replace("\\\\", "\\\\\\\\", $tekst); $tekst = str_replace('%', "\\%", $tekst); $tekst = str_replace('_', "\\_", $tekst); /* Tekst do przeszukania jest dzielony na wyrazy. * Wyraz jest to ciąg znaków (dowolnych). * Wyrazy są oddzielana jedną lub kilkoma spacjami. * Maksymalnie może być poszukiwanych 5 wyrazów. */ $tokens = explode(' +', $tekst, 5); // Konstruujemy warunek czy kod lub nazwa (lub opis) zawierają słowo (słowa) $iloscWyrazow = count($tokens); /* * Zaczynamy budować zapytanie. preg_match('!DoWolNaWielKosC, Niom\!!i'); */ $temp = ' AND (('; //cały warunek jest objęty nawiasami $tempKat = ''; for ($i=0; $i<$iloscWyrazow; $i++) { if ((strlen($tokens[$i])>3) && (preg_match('/[aiye]$/',$tokens[$i]))) { $tokens[$i] = substr($tokens[$i], 0, strlen($tokens[$i])-1); } if (substr($tokens[$i],-1)=='*') { $tokens[$i] = substr($tokens[$i],0,-1); $temp .= "(CONCAT(IF(tow_prdshow=1,CONCAT(prd_nazwa,' '),''),IF(tow_chtekst1='','',CONCAT(tow_chtekst1,' ')),tow_nazwa) LIKE '$tokens[$i]%'"; $tempKat .= "(kat_id <> kat_id)"; } else { $temp .= "((tow_nazwa LIKE '%$tokens[$i]%') OR ". " (prd_nazwa LIKE '%$tokens[$i]%') OR ". " (tow_opis1 LIKE '%$tokens[$i]%') OR ". " (tow_chtekst1 LIKE '%$tokens[$i]%')"; if ($search_szczegolowe==1) { $temp .= " OR (tow_opis2 LIKE '%$tokens[$i]%')"; } //if ($search_dzial==0) { $tempKat .= "(kat_nazwa LIKE '%$tokens[$i]%')"; //$temp .= " OR (kat_nazwa LIKE '%$tokens[$i]%')"; //echo $zapytanie.$temp; //} } $temp .= ")"; // Sprawdzamy czy jest jeszcze więcej wyrazów które będą łączone spójnikiem if ($i<($iloscWyrazow-1)) { $temp .= ' '.(($search_spojnik==1)?'AND':'OR').' '; $tempKat .= ' '.(($search_spojnik==1)?'AND':'OR').' '; } } // for $temp .= ')'; $zapytanie .= $temp; $zapytanieCount .= $temp; //if ($search_dzial==0) { //echo $tempKat; $listaDzialow = pobierzListeIdPoddzialowZNazwa($tempKat); if ($listaDzialow != '') { $zapytanie .= ' OR (kt_katid IN ('.$listaDzialow.'))'; $zapytanieCount .= ' OR (kt_katid IN ('.$listaDzialow.'))'; } $zapytanie .= ')'; $zapytanieCount .= ')'; //echo $zapytanie; //exit; //} } } switch ($search_sortby) { case 0: // cena $zapytanie .= ' ORDER BY tow_cena,tow_nazwaf'; break; case 1: // producent $zapytanie .= ' ORDER BY prd_nazwa,tow_nazwaf'; break; case 2: // nazwa $zapytanie .= ' ORDER BY tow_nazwaf'; break; case 3: // nowość $zapytanie .= ' ORDER BY tow_nowosc DESC,tow_nazwaf'; break; case 4: // promocja $zapytanie .= ' ORDER BY tow_promocja DESC,tow_nazwaf'; break; case 5: // wyprzedaż $zapytanie .= ' ORDER BY tow_promocja DESC, tow_wyprzedaz DESC, tow_nazwaf'; break; } // LIMIT I OFFSET if ($search_limit != 0) { $zapytanie .= ' LIMIT '.$search_limit.' OFFSET '.$search_offset; } //echo $zapytanie; //for ($i=0; $i<30000; $i++) { // Pobieranie liczby wszystkich produktów spełniających warunki $wynik = baza_zapytanie($baza_polaczenie, $zapytanieCount); $search_iloscZnalezionychProduktow = mysql_result($wynik,0,0); // Pobieranie produktów do wyświetlania czyli spełniających warunki oraz // spełniające limit i offset //echo $zapytanie; $wynik = baza_zapytanie($baza_polaczenie, $zapytanie); $search_iloscWynikow = mysql_num_rows($wynik); //} $search_tablicaWynikow = array(); for ($i=0; $i<$search_iloscWynikow; $i++) { $search_tablicaWynikow[$i] = mysql_fetch_array($wynik); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// //******************************************************************************* // H T M L //******************************************************************************* ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// // Adres strony z zawartością środkowej tabeli dla modułu 'szkielet.html' ///////////////////////////////////////////////////////////////////////////////// if (($search_iloscWynikow == 0) && ($search_typ==2)) { $srodkowyModulHTML = 'szukajnone.html'; } else { $srodkowyModulHTML = 'przegladanie.html'; } //$srodkowyModulHTML = 'przegladanie.html'; ///////////////////////////////////////////////////////////////////////////////// // Wyświetlenie strony ///////////////////////////////////////////////////////////////////////////////// require('modules/szkielet.html'); ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// ?>