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

Форум MySQL

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

 

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

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

тема: Наибольшие значений кортежей
 
 автор: mmaks   (19.05.2006 в 19:18)   письмо автору
 
 

В таблице БД есть поле VARCHAR, в нем хранятся значения вида:
12
12-1
45
99
358
43
24
45-7
211

Требуется средствами PHP и SQL вывести 5 кортежей у которых в этом поле наибольшие значения, причем вывести в обратном порядке т.е.:

358 далее данные кортежа
211 далее данные кортежа
99 далее данные кортежа
45 далее данные кортежа
и так далее.....

Проблемма в том, что SQL считает максимальным значением 99 а не 358....

   
 
 автор: Trianon   (19.05.2006 в 20:15)   письмо автору
 
   для: mmaks   (19.05.2006 в 19:18)
 

Посимвольное сравнение дает ожидаемый результат:
99 < 358 
но
'99' > '358' 
поскольку девятка больше тройки.

Надо либо изменить тип поля на INT,
либо (если первое сделать по внешним причинам невозможно)
преобразовывать тип поля к числовому с помощью функции CAST или CONVERT.

   
 
 автор: mmaks   (20.05.2006 в 20:09)   письмо автору
 
   для: Trianon   (19.05.2006 в 20:15)
 

Просто в таблице есть поля вида NN-N. Преобразовать их к числовому достаточно сложно.....
На данный момент стоит очень неэлегантная заглушка вида:

$str = "SELECT * FROM 'catalog'"; 
$r = mysql_query($str);
$row = mysql_num_rows($r);
for ($i=0; $i < $row; $i++)
     {
            $massiv[$i] = mysql_result ($r,$i,0);                                          
      }
natsort($massiv);
$str = "SELECT * FROM 'catalog' WHERE 0"; 
for ($i=$row ;$i > ($row - 30); $i--)
       {
              $str = $str." or 'art'=\"".$massiv[$i]."\""; 
         }
$str .= " ORDER BY 'art' desc"; 
$r = mysql_query($str);

Если у кого нибудь есть более простые решения, поделитесь..... ;)

   
 
 автор: Trianon   (20.05.2006 в 21:26)   письмо автору
 
   для: mmaks   (20.05.2006 в 20:09)
 

Никто не предлагал преобразовывать ВСЕ поля в таблице. Только те, которые требуют числовой сортировки, а следовательно, хранят числа.

   
Rambler's Top100
вверх

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