Mysql ЗАКАЗАТЬ ПО номерам DESC - PullRequest
4 голосов
/ 04 ноября 2011

У меня есть простой запрос на выбор MySQL в моем коде PHP:

$result = mysql_query("SELECT text FROM example ORDER BY rank DESC");
while($row = mysql_fetch_array($result))
  {
  echo $row['text'] . "<br>";
  }

и эта таблица MySql:

   text | rank
--------+--------
 google | 245
--------+--------
 yahoo  | 32
--------+--------
 bing   | 12

Когда я получаю результаты запроса, отображается что-то вроде этого:

yahoo 
google
bing

Я хочу, чтобы Google был впереди. Я думаю, Yahoo идет первым, потому что начинается с «3».

Как можно сделать так, чтобы запрос упорядочивал результаты по размеру чисел в ранге?

Спасибо ...

Ответы [ 5 ]

9 голосов
/ 04 ноября 2011

Я предполагаю, что поле rank является неким строковым типом.Сделайте это числовым типом int, и он будет правильно заказывать

6 голосов
/ 04 ноября 2011

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

SELECT text FROM example ORDER BY rank + 0 DESC

или:

SELECT text FROM example ORDER BY cast(rank as unsigned) DESC
3 голосов
/ 04 ноября 2011

Какой тип данных rank в вашей схеме SQL?Установите для него числовой тип.

1 голос
/ 04 ноября 2011
$result = mysql_query("SELECT * FROM `example` ORDER BY `rank` DESC");

while($row = mysql_fetch_array($result))
{
  echo $row['text'] ."<br>";
}
1 голос
/ 04 ноября 2011

Попробуйте это:

$result = mysql_query("SELECT * FROM example ORDER BY rank DESC");
while($row = mysql_fetch_array($result))
{
  echo $row['text'] . "  ". $row['rank'] ."<br>";
}

И посмотрите, правильно ли отсортированы ранги.

...