Форумы портала PHP.SU » » Работа с СУБД » Поиск из нескольких значений по одному полю в БД

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

1. Шмайсер - 20 Июня, 2011 - 08:40:04 - перейти к сообщению
Здравствуйте. Такой вопрос - в форме поиска есть
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.  


Как правильно сделать так, чтобы если выбраны несколько станций метро, поиск искал по этим станциям?
В моем случае он ищет только по последней введенной в селект.
Подозреваю, что надо как то запихнуть в массив, но как?
Подскажите решение!
Заранее спасибо
2. EuGen - 20 Июня, 2011 - 08:57:53 - перейти к сообщению
Собирать в массив и использовать 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.  
3. Шмайсер - 20 Июня, 2011 - 09:33:03 - перейти к сообщению
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.  


за значение станций отвечает
PHP:
скопировать код в буфер обмена
  1.  
  2. metro=' . $metro_s . '&
  3.  

Не могли бы вы прямо в моем коде написать как нужно сделать? Просто может я чето не так делаю?
Заранее спасибо!
4. EuGen - 20 Июня, 2011 - 09:36:40 - перейти к сообщению
Шмайсер пишет:
как нужно сделать?

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

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

 

Powered by ExBB FM 1.0 RC1