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

Форум MySQL

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

 

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

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

тема: Ближайшее число
 
 автор: Peeter   (16.09.2010 в 01:40)   письмо автору
 
 

Доброго времени суток.
Имеется такой запрос, который выводит ближайшее число в меньшую сторону
<?
$number 
35;
echo 
mysql_result(mysql_query("SELECT num FROM table ORDER BY ABS(num - '$number') LIMIT 1"), 0);

Подскажите каким запросом найти ближайшее число в поле таблицы от заданного числа в большую сторону?

  Ответить  
 
 автор: ols   (16.09.2010 в 02:28)   письмо автору
 
   для: Peeter   (16.09.2010 в 01:40)
 

<? 
$number 
35
$var =  mysql_result(mysql_query("SELECT num FROM table ORDER BY ABS(num - '$number') LIMIT 1"), 0);

$sql "SELECT num FROM table WHERE num < $var LIMIT 1";
?>

  Ответить  
 
 автор: Trianon   (16.09.2010 в 08:05)   письмо автору
 
   для: ols   (16.09.2010 в 02:28)
 

>$sql = "SELECT num FROM table WHERE num < $var LIMIT 1";
>

и много толка с LIMIT при отсутствующем порядке?

  Ответить  
 
 автор: ols   (16.09.2010 в 10:18)   письмо автору
 
   для: Trianon   (16.09.2010 в 08:05)
 

Ну да, следует указывать явно
$sql = "SELECT num FROM table WHERE num < $var ORDER BY num LIMIT 1";

  Ответить  
 
 автор: Trianon   (16.09.2010 в 10:56)   письмо автору
 
   для: ols   (16.09.2010 в 10:18)
 

>Ну да, следует указывать явно
>$sql = "SELECT num FROM table WHERE num < $var ORDER BY num LIMIT 1";

Чушь.
элементы таблицы : 1 2 3 4 5
$num = 3

считайте сами, что выйдет.

  Ответить  
 
 автор: ols   (16.09.2010 в 11:10)   письмо автору
 
   для: Trianon   (16.09.2010 в 10:56)
 

$sql = "SELECT num FROM table WHERE num < $var ORDER BY num DESC LIMIT 1";

  Ответить  
 
 автор: Trianon   (16.09.2010 в 13:23)   письмо автору
 
   для: ols   (16.09.2010 в 11:10)
 

А теперь скажите, зачем требовать от сервера брать всю таблицу, когда достаточно попросить одну строку?

SELECT MAX(num) FROM table WHERE num < $var 

  Ответить  
 
 автор: ols   (16.09.2010 в 13:30)   письмо автору
 
   для: Trianon   (16.09.2010 в 13:23)
 

Да действетильно, не зачем.

Хотя сомневаюсь, что в обоих случаях сервер, при наличии индексов, будет брать всю таблицу

  Ответить  
 
 автор: Peeter   (23.09.2010 в 04:38)   письмо автору
 
   для: ols   (16.09.2010 в 11:10)
 

<?
$number 
35;    
echo 
mysql_result(mysql_query("SELECT MAX(num) FROM table WHERE num < '$number' ORDER BY num DESC LIMIT 1"), 0);
?>


Например имеем в таблице такие записи:
id | num
1 | 34
2 | 38
3 | 52


Ваш запрос выведет число 34, а должно вывести 38.
А если $number меньше 34, то и вовсе выдаст ошибку.

  Ответить  
 
 автор: Trianon   (23.09.2010 в 09:49)   письмо автору
 
   для: Peeter   (23.09.2010 в 04:38)
 

кто Вам дописал LIMIT 1 ?

  Ответить  
 
 автор: ols   (23.09.2010 в 11:16)   письмо автору
 
   для: Peeter   (23.09.2010 в 04:38)
 

Да LIMIT там вовсе уже не нужен. Поскольку задействована агрегтная функция. И переменную $number в апострофы не нужно заключать, это число.

  Ответить  
 
 автор: Лена   (23.09.2010 в 11:53)   письмо автору
 
   для: Peeter   (23.09.2010 в 04:38)
 

Зачем вам в запросе ORDER BY num?
Вы одну ячейку выбираете.

  Ответить  
 
 автор: Trianon   (23.09.2010 в 12:04)   письмо автору
 
   для: Лена   (23.09.2010 в 11:53)
 

кстати, да.

  Ответить  
 
 автор: Peeter   (23.09.2010 в 13:21)   письмо автору
 
   для: Peeter   (23.09.2010 в 04:38)
 

<? echo mysql_result(mysql_query("SELECT MAX(num) FROM ttt WHERE num < $number"), 0);

Такой вариант тоже не работает.

  Ответить  
 
 автор: Trianon   (23.09.2010 в 15:08)   письмо автору
 
   для: Peeter   (23.09.2010 в 13:21)
 

небось ближайшее меньшее выдает?

  Ответить  
 
 автор: Peeter   (24.09.2010 в 00:44)   письмо автору
 
   для: Trianon   (23.09.2010 в 15:08)
 

так точно =)

  Ответить  
 
 автор: Trianon   (24.09.2010 в 08:57)   письмо автору
 
   для: Peeter   (24.09.2010 в 00:44)
 

и что, меньше на больше и наоборот в запросе поменять религия не позволяет?

  Ответить  
 
 автор: Peeter   (24.09.2010 в 22:18)   письмо автору
 
   для: Trianon   (24.09.2010 в 08:57)
 

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

  Ответить  
 
 автор: ride   (24.09.2010 в 22:27)   письмо автору
 
   для: Peeter   (24.09.2010 в 22:18)
 

ну так max на min тоже поменять надо

  Ответить  
 
 автор: Peeter   (24.09.2010 в 22:58)   письмо автору
 
   для: ride   (24.09.2010 в 22:27)
 

Не додумался, спасибо!

  Ответить  
 
 автор: Trianon   (24.09.2010 в 22:56)   письмо автору
 
   для: Peeter   (24.09.2010 в 22:18)
 

где уж мне.
"и наоборот" что означает?

  Ответить  
 
 автор: Trianon   (16.09.2010 в 08:05)   письмо автору
 
   для: Peeter   (16.09.2010 в 01:40)
 

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

Этот запрос выводит нечто другое.

  Ответить  
Rambler's Top100
вверх

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