mysql показывает строки в порядке от самого высокого значения до самого низкого значения - PullRequest
0 голосов
/ 11 августа 2009

У меня есть таблица, которая содержит столбец с именем views. Каждый раз, когда пользователь обновляет страницу, он обновляет количество просмотров + 1.
То, что я пытаюсь сделать, это создать запрос MySQL для вывода списка строк на основе их количества просмотров, от самого высокого до самого низкого.

это то, что я думал, будет работать

SELECT * FROM picdb ORDER BY views DESC LIMIT 10

, даже когда я смотрю на него В ВОСТОЧНОМ состоянии, это все не так.

мысли

EDIT тип столбца TEXT

решено изменен тип столбца на INT, и теперь он работает нормально. Спасибо за указание на это.

Ответы [ 5 ]

3 голосов
/ 11 августа 2009
SELECT
    *
FROM
    tbl
ORDER BY
    CAST(views AS UNSIGNED) DESC
LIMIT
    10

Могу сделать свое дело. На самом деле вопрос в том, почему у вас есть столбец, содержащий целые числа с типом текста?

3 голосов
/ 11 августа 2009

Если тип столбца - TEXT, по умолчанию сортировка обрабатывает данные как строки и, следовательно, сортирует их по алфавиту (а не по номерам).

Измените тип столбца на тип числа, и он будет отсортирован правильно.

1 голос
/ 11 августа 2009

Это похоже на классическую алфавитно-цифровую проблему сортировки. Если тип столбца - текст, то вы, вероятно, видите порядок, например 1, 10, 15, 20, 3. Другими словами, это сортировка по текстовому значению вместо целочисленного.

Вы можете изменить столбец на числовой тип, или вы можете сделать:

SELECT * FROM picdb ORDER BY CONVERT(views, UNSIGNED INTEGER) DESC LIMIT 10

Однако это не сможет использовать какой-либо индекс в столбце views. Было бы лучше изменить столбец на числовой тип, если это действительно то, что он представляет.

1 голос
/ 11 августа 2009
select a,b,CAST(views AS UNSIGNED) c from picdb order by c desc limit 10
0 голосов
/ 15 октября 2017

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

query = "SELECT * FROM CurrencyTable ORDER BY CAST(currency_rate AS UNSIGNED) DESC";

И если вы хотите показать строки от от нижнего значения до более высокого значения , используйте этот запрос

query-2 = "SELECT * FROM CurrencyTable ORDER BY CAST(currency_rate AS UNSIGNED) ASC";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...