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

Форум MySQL

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

 

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

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

тема: Запрос в БД от и до
 
 автор: chexov   (17.06.2007 в 13:37)   письмо автору
 
 

Уважаемые, скажите пожалуйста как осуществить такой запрос:
у меня есть 2 поля ввода 1-от и 2-до какая функция осуществляет выборку из таблицы в этом промежутке например от 10 до 50?

   
 
 автор: CrazyAngel   (17.06.2007 в 14:22)   письмо автору
 
   для: chexov   (17.06.2007 в 13:37)
 

SELECT * FROM table WHERE pole>=10 and pole<=50;

pole - поле
table - таблица

   
 
 автор: chexov   (17.06.2007 в 15:26)   письмо автору
 
   для: CrazyAngel   (17.06.2007 в 14:22)
 

А как лучше объеинить несколько запросов в один если я ищу по нескольким параметрам которые находятся в одной таблице в разных полях?
Т.е ищу например: По полу(М или Ж), по Возрасту(от и до) и т.д
Подскажите пожалуйста а то у меня очень громоздкий код выходит

   
 
 автор: Trianon   (17.06.2007 в 15:42)   письмо автору
 
   для: chexov   (17.06.2007 в 15:26)
 

соединяйте условия поиска implode(' AND ', $conds)

   
 
 автор: chexov   (17.06.2007 в 15:47)   письмо автору
 
   для: Trianon   (17.06.2007 в 15:42)
 

>соединяйте условия поиска implode(' AND ', $conds)
$conds? мои переменные?

   
 
 автор: Trianon   (17.06.2007 в 16:01)   письмо автору
 
   для: chexov   (17.06.2007 в 15:47)
 

$conds - массив , хранящий сформированные условия.
например

$conds = array();
if(!empty($_GET['age_min']))  $conds[] = "age >= " .intval ($_GET['age_min']);
if(!empty($_GET['age_max']))  $conds[] = "age <= " .intval ($_GET['age_max']);
if(!empty($_GET['gender']))  $conds[] = "gender = ".$genders[3&$_GET['gender']];

   
 
 автор: chexov   (17.06.2007 в 16:07)   письмо автору
 
   для: Trianon   (17.06.2007 в 16:01)
 

это я понял а дальше как запрос с $conds сформировать?

SELECT * FROM table WHERE .......;

что после where?

   
 
 автор: Trianon   (17.06.2007 в 16:11)   письмо автору
 
   для: chexov   (17.06.2007 в 16:07)
 

после WHERE результат implode

   
 
 автор: chexov   (17.06.2007 в 19:15)   письмо автору
 
   для: Trianon   (17.06.2007 в 16:11)
 

все же можно пример запроса полностью ,как выглядит а т омутил и ничего не вышло:(

   
 
 автор: Trianon   (17.06.2007 в 19:42)   письмо автору
 
   для: chexov   (17.06.2007 в 19:15)
 

показывайте, что делали и что получили.
Пример запроса я показал.

   
 
 автор: chexov   (17.06.2007 в 19:49)   письмо автору
 
   для: Trianon   (17.06.2007 в 19:42)
 


$conds = array(); 
if(!empty($_GET['1q']))  $conds[] = "s >= " .intval ($_GET['1q']); 
if(!empty($_GET['2q']))  $conds[] = "s <= " .intval ($_GET['2q']); 
if(!empty($_GET['3q']))  $conds[] = "d >= ".intval($_GET['3q']);
if(!empty($_GET['4q']))  $conds[] = "d <= ".intval($_GET['4q']);

Дальше я пробовал сформировать запрос но...

$query = mysql_query("SELECT * FROM `table` WHERE  implode(' AND ', $conds);");

Так??

   
 
 автор: Trianon   (17.06.2007 в 20:29)   письмо автору
 
   для: chexov   (17.06.2007 в 19:49)
 


$query = mysql_query("SELECT * FROM `table` WHERE  ".implode(' AND ', $conds)); 

   
 
 автор: chexov   (18.06.2007 в 04:28)   письмо автору
 
   для: Trianon   (17.06.2007 в 20:29)
 

Не получается так, гичего не выводит:(

   
 
 автор: chexov   (18.06.2007 в 11:50)   письмо автору
 
   для: chexov   (18.06.2007 в 04:28)
 

мне так и не ответят?

   
 
 автор: cheops   (18.06.2007 в 12:03)   письмо автору
 
   для: chexov   (18.06.2007 в 11:50)
 

Сообщение об ошибке какое-нибудь выводится?

   
 
 автор: chexov   (18.06.2007 в 12:14)   письмо автору
 
   для: cheops   (18.06.2007 в 12:03)
 

не то чтобы ошибка, ваш запрос ничего не дал! хотя я вводил данные которые содержатся в таблице

   
 
 автор: Trianon   (18.06.2007 в 12:36)   письмо автору
 
   для: chexov   (18.06.2007 в 12:14)
 

Приводите дамп структуры и данных (показательный фрагмент)
и код php.

   
 
 автор: chexov   (18.06.2007 в 14:04)   письмо автору
 
   для: Trianon   (18.06.2007 в 12:36)
 


CREATE TABLE `table` (
  `id` int(11) NOT NULL auto_increment,
  `login` text,
  `password` text,
  `name` text,
  `sex` text,
  `age` text,
  `ves` text,
  `rost` text
);

Код:

print "Пол
 <select name="pol">
<option value="zh">Ж</option>
<option value="mu">М</option></select><br/>";
print "Рост
от: <input type="text" name="r_ot" maxlength="3" size="3" format="*N"/> до: <input type="text" name="r_do" maxlength="3" size="3" format="*N"/><br/>";

аналогичные поля v_ot, v_do, a_ot, a_do



$conds = array(); 
if(!empty($a_ot))  $conds[] = "".age." >= " .intval ($a_ot); 
if(!empty($a_do))  $conds[] = "".age." <= " .intval ($a_do); 
if(!empty($v_ot))  $conds[] = "ves >= ".intval($v_ot);
if(!empty($v_do))  $conds[] = "ves <= ".intval($v_do);
if(!empty($r_ot)) $conds[] = "rost >= ".intval($r_ot);    
if(!empty($r_do)) $conds[] = "rost <= ".intval($r_do);
if(!empty($pol))    $conds[] = "sex = ".intval($pol);

$query = mysql_query("SELECT * FROM `table` WHERE  ".implode(' AND ', $conds).";");
if(mysql_affected_rows()==0){print"По вашему запросу ничего не найдено!<br/>";}

while($result=mysql_fetch_array($query))
{
print " ".$result['login']." <br/>";
}

   
 
 автор: Trianon   (18.06.2007 в 14:34)   письмо автору
 
   для: chexov   (18.06.2007 в 14:04)
 

Дамп данных Вы не привели.
Но и сейчас могу сказать, что считать будет неправильно, из-за того, что Вы, это как минимум, некорректно храните данные в таблице.
Если данные числовые - хранить их нужно в числовом поле , а не в текстовом.
Иначе Вы столкнетесь с тем, что вес в 105 кг окажется меньше 90 кг. Единица меньше девятки.

Кроме того, неясно, как (и зачем) буковки mu zh Вы пропихиваете через intval.
Я полагал , проще обойтись цифрами. 1 - жен 2 -муж . Или наоборот.

   
 
 автор: chexov   (18.06.2007 в 14:38)   письмо автору
 
   для: Trianon   (18.06.2007 в 14:34)
 

я привел имена переменных , образно, исправил поля таблицы, все равно не работает!:(

   
 
 автор: Trianon   (18.06.2007 в 14:43)   письмо автору
 
   для: chexov   (18.06.2007 в 14:38)
 

Мне стыдно. :)

   
 
 автор: chexov   (18.06.2007 в 16:03)   письмо автору
 
   для: Trianon   (18.06.2007 в 14:43)
 

Нет так нет! толком ничего не подсказали:(

   
 
 автор: Trianon   (17.06.2007 в 15:41)   письмо автору
 
   для: CrazyAngel   (17.06.2007 в 14:22)
 

SELECT * FROM table WHERE pole BETWEEN 10 AND 50;

   
Rambler's Top100
вверх

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