|
|
|
| В таблице БД есть поле VARCHAR, в нем хранятся значения вида:
12
12-1
45
99
358
43
24
45-7
211
Требуется средствами PHP и SQL вывести 5 кортежей у которых в этом поле наибольшие значения, причем вывести в обратном порядке т.е.:
358 далее данные кортежа
211 далее данные кортежа
99 далее данные кортежа
45 далее данные кортежа
и так далее.....
Проблемма в том, что SQL считает максимальным значением 99 а не 358.... | |
|
|
|
|
|
|
|
для: mmaks
(19.05.2006 в 19:18)
| | Посимвольное сравнение дает ожидаемый результат:
но
поскольку девятка больше тройки.
Надо либо изменить тип поля на INT,
либо (если первое сделать по внешним причинам невозможно)
преобразовывать тип поля к числовому с помощью функции CAST или CONVERT. | |
|
|
|
|
|
|
|
для: 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);
|
Если у кого нибудь есть более простые решения, поделитесь..... ;) | |
|
|
|
|
|
|
|
для: mmaks
(20.05.2006 в 20:09)
| | Никто не предлагал преобразовывать ВСЕ поля в таблице. Только те, которые требуют числовой сортировки, а следовательно, хранят числа. | |
|
|
|