Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Расширенный поиск
 
 автор: kis-kis   (13.11.2006 в 09:44)   письмо автору
 
 

Как сделать расширенный поиск по базе данных, хотелось бы также как и на сайте job.ru http://job.ru/findvac.html
Можете ли что-нибудь посоветовать? Спасибо.

   
 
 автор: cheops   (13.11.2006 в 12:22)   письмо автору
 
   для: kis-kis   (13.11.2006 в 09:44)
 

Обычно искомые параметры помещаются в различные поля базы данных и в зависимости от выбора пользователя SQL-запрос формируется динамически.

   
 
 автор: kis-kis   (13.11.2006 в 13:01)   письмо автору
 
   для: cheops   (13.11.2006 в 12:22)
 

Допустим база такая:


CREATE TABLE `j_vacancy` (
  `id` int(11) NOT NULL auto_increment,
  `job_title` text NOT NULL,
  `cat` int(1) NOT NULL default '0',
  `gorod` int(1) NOT NULL default '0',
  `sex` int(1) NOT NULL default '0',
  `study` int(1) NOT NULL default '0',
  `expwork` int(1) NOT NULL default '0',
  `age_from` text NOT NULL,
  `age_before` text NOT NULL,
  `zp` text NOT NULL,
  `graf` int(1) NOT NULL default '0',
  `zan` int(1) NOT NULL default '0',
  `text_vacancy` text NOT NULL,
  `org` text NOT NULL,
  `name` text NOT NULL,
  `tel` text NOT NULL,
  `email` text NOT NULL,
  `show_email` int(1) default '0',
  `who` int(1) NOT NULL default '0',
  `period` text NOT NULL,
  `status` int(1) default '0',
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

   
 
 автор: Grozniy   (13.11.2006 в 14:05)   письмо автору
 
   для: kis-kis   (13.11.2006 в 13:01)
 

А что именно требуется организовать запрос к базе? или создать форму?
Если форму то можно попробовать так:
Файл 1.php

<form name="search_data" method="post" action="search.php">
Зарплата: <input class="search" type="text" name="zp"><br>
Город: <input class="search" type="text" name="city"><br>
<a href="#" class=text2 onclick="onclick=search_data.submit(); return false">начать поиск</a></form>

обработка же этой формы будет проходить в файле search.php

<?

$zp
=$HTTP_POST_VARS['zp'];
$city=$HTTP_POST_VARS['city'];

$query "select * from j_vacancy zp=$zp and gorod=$city)";
$result mysql_query($query);
$num_result mysql_num_rows($result);
if (
num_result==or num_result==null)
{
print 
"
По вашему запросу ничего не найдено
"
;
}
else
{
while (
$line mysql_fetch_array($resultMYSQL_ASSOC))
{
print 
"
$line[zp]<br>
$line[text_vacancy]<br>
"
;
}
}
            
?>

   
 
 автор: kis-kis   (13.11.2006 в 18:05)   письмо автору
 
   для: Grozniy   (13.11.2006 в 14:05)
 

Это не подойдет. Т.к. код, который вы предложили уравнивает зарплату, а нужно чтобы сравнивал, например если я напишу зарплата 500, то это не означает что зарплата 1000 меня не устроит. :-) и т.д. к тому же если не заданы условия поиска, то нужно выводить все данные... Но все равно спасибо.

   
 
 автор: Grozniy   (13.11.2006 в 18:32)   письмо автору
 
   для: kis-kis   (13.11.2006 в 18:05)
 

Что касается зарплаты, то можно организовать выборку с условием, так же передать переменную ZP из поля и условием if выбирать то что устраивает. Я же писал общую схему.

if ($line[zp]>$zp)
{
print "
........
";
}


это же касается и если не заданы условия поиска,

if (!$zp || !$city || !$age)
{
$query ="select * from tables";
print "
.......
";
}


Но в этом случае придется для каждого поля оговаривать что печатать если оно не задано. Уверен что есть более короткий код, но я его пока еще не определил.

   
 
 автор: kasmanaft   (13.11.2006 в 19:08)   письмо автору
 
   для: Grozniy   (13.11.2006 в 18:32)
 

... скорее в запросе надо написать SELECT * * * zp>=$zp ...
kis-kis, динамически собираете запрос добавляя к " SELECT * FROM j_vacancy " всякие " AND zp>$zp", " AND city='$city' " и т.д. ... в зависимости от того, пусты или нет эти самые $zp и $city

   
 
 автор: kis-kis   (13.11.2006 в 21:01)   письмо автору
 
   для: kasmanaft   (13.11.2006 в 19:08)
 

Можно подробнее... А как выяснить пусты они или нет?

   
 
 автор: kis-kis   (13.11.2006 в 22:00)   письмо автору
 
   для: kasmanaft   (13.11.2006 в 19:08)
 

Никто не обращал внимания что переменные на job.ru не передаются в строку браузера? Как это сделано, интересно?

   
 
 автор: st.Ass   (13.11.2006 в 22:40)   письмо автору
 
   для: kis-kis   (13.11.2006 в 22:00)
 

посмотрите исходный код странички http://job.ru/findvac.html

увидите там это:


<form accept-charset="UTF-8" id="findVacanceForm" method="POST" ... и т.д.


просто используется метод POST

   
 
 автор: kasmanaft   (13.11.2006 в 22:44)   письмо автору
 
   для: kis-kis   (13.11.2006 в 22:00)
 

Там использован метод POST, a не GET.
А для того, чтобы определить пусты переменные или нет, можно использовать функцию empty:

$query = "SELECT * FROM table";
if (!empty($_POST['city']))
   $query .= " WHERE city='$city'";
if (!empty($_POST['zp']))
   $query .= " AND zp>='$zp'";

(примерно так)

   
 
 автор: kis-kis   (14.11.2006 в 09:27)   письмо автору
 
   для: kasmanaft   (13.11.2006 в 22:44)
 

Спасибо. А есть принципиальная разница в использовании GET и POST?
Если использовать POST, то тогда как быть с переменными?

   
 
 автор: Trianon   (14.11.2006 в 10:47)   письмо автору
 
   для: kis-kis   (14.11.2006 в 09:27)
 

>Спасибо. А есть принципиальная разница в использовании GET и POST?
Принципиальная разница между ними лишь в том, что параметры GET передаются строку адреса (и далее через заголовок) , а параметры POST - через тело запроса, и соответственно, объем параметров GET из-за этого сильно ограничен. Другой разницы меж ними нет.

>Если использовать POST, то тогда как быть с переменными?
то есть?

   
 
 автор: kis-kis   (14.11.2006 в 10:50)   письмо автору
 
   для: Trianon   (14.11.2006 в 10:47)
 

Теперь, я понял. Спасибо...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования