![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 9.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Poniżej prezentuje kod funkcji odpowiedzialnej na mojej stronie za wyszukiwanie. Mam mały problem z tą funkcją, a mianowicie nie np. po wpisaniu zakresu pięter od 1 do 1 wyświetla mi że brak ogłoszeń, a powinien wyświetlić ogłoszenia nieruchomości znajdujących się na 1 piętrze. Jak się wyszukuje z jakiegoś zakresu np. piętro od 1 do 2 to wyświetla ogłoszenia z tego zakresu. Serwis znajduje się pod adresem m-dom.pl Jeśli ktoś ma jakieś pomysły jak rozwiązać problem to czekam na info (IMG:style_emoticons/default/smile.gif) Kod function searchAction() { // get db adapter and session data $db = Zend_Registry::get('db'); $db->setFetchMode(Zend_Db::FETCH_OBJ); $search = new Zend_Session_Namespace('search'); $settings = new SettingsTable; $pageLimit = $settings->fetchRow('title = "pageLimit"'); // if isset post data then set new search variables if($this->_request->isPost()) { $search->where = NULL; // set where foreach($this->_request->getPost() as $name => $value) $post[$name] = $value; if(!empty($post['advertisementType'])) $search->where .= ('(advertisements.advertisementType = '.intval($post['advertisementType'])).') AND '; if(!empty($post['propertyType'])) $search->where .= ('(advertisements.propertyType = '.intval($post['propertyType'])).') AND '; if(!empty($post['province'])) $search->where .= ('(advertisements.province = '.intval($post['province'])).') AND '; if(!empty($post['city'])) $search->where .= ('(advertisements.city LIKE "%'.$post['city'].'%"').') AND '; if(!empty($post['street'])) $search->where .= ('(advertisements.street LIKE "%'.$post['street'].'%"').') AND '; if(!empty($post['priceFrom'])) $search->where .= ('(advertisements.price > '.floatval($post['priceFrom'])).') AND '; if(!empty($post['priceFor'])) $search->where .= ('(advertisements.price < '.floatval($post['priceFor'])).') AND '; if(!empty($post['areaSizeFrom'])) $search->where .= ('(advertisements.areaSize > '.intval($post['areaSizeFrom'])).') AND '; if(!empty($post['areaSizeFor'])) $search->where .= ('(advertisements.areaSize < '.intval($post['areaSizeFor'])).') AND '; if(!empty($post['liczbapieterFrom'])) $search->where .= ('(advertisements.liczbapieter > '.intval($post['liczbapieterFrom'])).') AND '; if(!empty($post['liczbapieterFor'])) $search->where .= ('(advertisements.liczbapieter < '.intval($post['liczbapieterFor'])).') AND '; if(!empty($post['pietroFrom'])) $search->where .= ('(advertisements.pietro > '.intval($post['pietroFrom'])).') AND '; if(!empty($post['pietroFor'])) $search->where .= ('(advertisements.pietro < '.intval($post['pietroFor'])).') AND '; if(!empty($post['liczbapokoiFrom'])) $search->where .= ('(advertisements.liczbapokoi > '.intval($post['liczbapokoiFrom'])).') AND '; if(!empty($post['liczbapokoiFor'])) $search->where .= ('(advertisements.liczbapokoi < '.intval($post['liczbapokoiFor'])).') AND '; if(!empty($post['keyword'])) $search->where .= ('(advertisements.otherInfo LIKE "%'.$post['keyword'].'%"').') AND '; if(!empty($post['nrofer'])) $search->where .= ('(advertisements.nrofer LIKE "%'.$post['nrofer'].'%"').') AND '; $search->where = substr($search->where, 0, (strlen($search->where)-4)); } if(!empty($search->where) && $this->_request->getParam('page') >= 1) { // get count finded advertisements $advertisements = new AdvertisementsTable; $select = $advertisements->select(); $select->from($advertisements, 'count(id) as count') ->where($search->where); $row = $advertisements->fetchRow($select); $this->view->search = true; if($row->count > 0) { // create final query $select = $db->select(); $select->from('advertisements', array('id', 'nrofer', 'liczbapieter', 'pietro', 'liczbapokoi', 'areaSize', 'areaSize', 'price', 'description', 'city', 'announceDate', 'promo')) ->joinInner('propertyTypes', 'propertyTypes.id = advertisements.propertyType', 'type as propertyType') ->joinInner('advertisementTypes', 'advertisementTypes.id = advertisements.advertisementType', 'type as advertisementType') ->joinInner('provinces', 'provinces.id = advertisements.province', 'province') ->joinLeft('images', 'images.advertisementId = advertisements.id', 'image') ->where($search->where) ->where('dayCounter > 0') ->group('id') ->order(array('promo DESC', 'announceDate DESC')) ->limit($pageLimit->value, ($this->_request->getParam('page')-1)*$pageLimit->value); $result = $db->query($select); $this->view->advertisements = $result->fetchAll(); // set pages parameters $this->view->pagesLink = 'adv/search/'; $this->view->pagesCount = $row->count; $this->view->pagesLimit = $pageLimit->value; $this->view->pagesCurrent = $this->_request->getParam('page'); } } } Pozdrawiam i z góry dziękuję za pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Jeśli podasz w wyszukiwarce "piętro od" równe 1 oraz "piętro do" także równe 1, będziesz miał warunek:
A jeden nie jest ani mniejsze od 1, ani większe od 1. Dlatego powinieneś dać w warunku znaki <= (mniejsze lub równe) oraz >= (większe lub równe). Swoją drogą zastanawiające jest, jakim cudem wyświetla Ci prawidłowo ogłoszenia z zakresu pięter 1 do 2, gdyż:
czyli warunek też nie powinien być spełniony (bo nie ma liczby całkowitej , która byłaby równocześnie większa od 1 i mniejsza od 2. Chyba, że to zapytanie jest jeszcze gdzieś modyfikowane, np. zamieniane są AND na OR, gdy są podane dwie wartości dla jednej zmiennej, tak, by utworzyć zakres (a.p > 1 OR a.p < 2 ) albo coś takiego. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 9.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc.
Już wszystko śmiga tak jak chciałem (IMG:style_emoticons/default/smile.gif) Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 10:09 |