Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск из нескольких значений по одному полю в БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Шмайсер
Отправлено: 20 Июня, 2011 - 08:40:04
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




Здравствуйте. Такой вопрос - в форме поиска есть
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <select name="metro" class="select" multiple="multiple">
  3.                     <option value="0" selected><?php print TEMPLATE_SEARCH_NE_VAGNO ?></option>
  4.                     <option value="Молодежная">Молодежная</option>
  5.                     <option value="Кутузовская">Кутузовская</option>
  6.                                 <option value="Студенческая">Студенческая</option>
  7.                     </select>
  8.  

Обработчик формы имеет такой вид
PHP:
скопировать код в буфер обмена
  1. $metro_s = isset($_GET['metro']) ? ClearDataFromForm($_GET['metro']) : '';
  2.  
  3. // выборка необходимых объявлений
  4.         $query = "SELECT SQL_CACHE SQL_CALC_FOUND_ROWS * FROM $resume_t WHERE active_resume='1' AND id_razdel$razdel"
  5.                    . " AND id_profecy$prof AND id_oblast$oblast AND id_city$city AND zp_resume>='$zp_resume_ot' AND zp_resume<='$zp_resume_do' AND metro='$metro_s'"
  6.                    . " AND currency_resume$currency AND $grafic AND gender_resume$gender AND $expire AND $edu AND $image"
  7.                    . " $order LIMIT $offset, $perPageSearch";
  8.                    
  9.         $result = mysql_query($query);
  10.  
  11. // формирование страниц
  12.         $path = 'searchr.php?id_razdel=' . $id_razdel . '&id_profecy=' . $id_profecy .
  13.                                   '&id_oblast=' . $id_oblast . '&id_city=' . $id_city .
  14.                                   '&metro=' . $metro_s . '&zp_resume_ot=' . $zp_resume_ot . '&zp_resume_do=' . $zp_resume_do . '&name_currency=' . $currency_resume . '&grafic_resume=' . $grafic_resume .
  15.                                   '&gender_resume=' . $gender_res . '&expire_resume=' . $expire_resume . '&edu_resume=' . $edu_resume .
  16.                                   '&image=' . $image_files . '&order_by=' . $order_by . '&'; //текущий обработанный URL
  17.         $strPages = strings::generatePage($num_rows[0], $offset, $perPageSearch, $path); // формируем странциы
  18.         print $strPages;
  19.  
  20.  
  21.  


Как правильно сделать так, чтобы если выбраны несколько станций метро, поиск искал по этим станциям?
В моем случае он ищет только по последней введенной в селект.
Подозреваю, что надо как то запихнуть в массив, но как?
Подскажите решение!
Заранее спасибо
 
 Top
EuGen Администратор
Отправлено: 20 Июня, 2011 - 08:57:53
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Собирать в массив и использовать IN:
PHP:
скопировать код в буфер обмена
  1.  
  2. // $rgStations сформирован из пришедших значений формы и это массив
  3. $rgWheres=array();
  4. //в $rgWheres добавить остальные условия отбора
  5. if(count($rgStations))
  6. {
  7.    $rgWheres[]='(metro IN ('.join(',', $rgStations).'))';
  8. }
  9. $strWhere='';
  10. if(count($rgWheres))
  11. {
  12.    $strWhere=' WHERE '.join(' && ', $rgWheres);
  13. }
  14. $query = "SELECT SQL_CACHE SQL_CALC_FOUND_ROWS * FROM $resume_t".$strWhere;
  15. // ...
  16.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Шмайсер
Отправлено: 20 Июня, 2011 - 09:33:03
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Окт. 2010  


Помог: 0 раз(а)




EuGen, спасибо но к сожалению так и не смог ваше решение прикрутить к своему коду. В нотисах пишет "неустановлено $rgStations". Пробовал дать ей значения из $_GET['metro'] - тоже самое.
К тому же мне еще нужно чтобы результаты поиска были в пагинации страниц, тоесть вот тут
PHP:
скопировать код в буфер обмена
  1.  
  2. // формирование страниц
  3.         $path = 'searchr.php?id_razdel=' . $id_razdel . '&id_profecy=' . $id_profecy .
  4.                                   '&id_oblast=' . $id_oblast . '&id_city=' . $id_city .
  5.                                   '&metro=' . $metro_s . '&zp_resume_ot=' . $zp_resume_ot . '&zp_resume_do=' . $zp_resume_do . '&name_currency=' . $currency_resume . '&grafic_resume=' . $grafic_resume .
  6.                                   '&gender_resume=' . $gender_res . '&expire_resume=' . $expire_resume . '&edu_resume=' . $edu_resume .
  7.                                   '&image=' . $image_files . '&order_by=' . $order_by . '&'; //текущий обработанный URL
  8.         $strPages = strings::generatePage($num_rows[0], $offset, $perPageSearch, $path); // формируем странциы
  9.         print $strPages;
  10.  


за значение станций отвечает

Не могли бы вы прямо в моем коде написать как нужно сделать? Просто может я чето не так делаю?
Заранее спасибо!
 
 Top
EuGen Администратор
Отправлено: 20 Июня, 2011 - 09:36:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Шмайсер пишет:
как нужно сделать?

В этом и состоит Ваша задача - реализовать предложенную мысль (ну, или же свою придумать).
Не старайтесь просто скопировать, попытайтесь вместо этого понять смысл идеи. А смысл ее состоит в том, чтобы во-первых, собрать данные для отбора в массив, а во-вторых, в одном из его элементов использовать IN и объединение массива. Также
EuGen пишет:
#
// $rgStations сформирован из пришедших значений формы и это массив
#
$rgWheres=array();

таким образом понять, как получить нужный массив - тоже одна из задач.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB