2009-08-10 6 views
0

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

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

SELECT * FROM picdb ORDER BY views DESC LIMIT 10 

даже когда я его просмотра восходящие, его все в порядке.

мысли?

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

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

+1

Какого типа даты колонки просмотров? – Nate

+0

забыл упомянуть, что ... post updated – mrpatg

+2

Почему текст типа столбца? Будет ли там что-то другое, кроме числа? Если бы это было числовое поле, оно, вероятно, правильно упорядочилось. –

ответ

3

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

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

3
SELECT 
    * 
FROM 
    tbl 
ORDER BY 
    CAST(views AS UNSIGNED) DESC 
LIMIT 
    10 

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

+0

Огромное вам спасибо, ты спас меня! –

1
select a,b,CAST(views AS UNSIGNED) c from picdb order by c desc limit 10 
1

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

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

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

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

0

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

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"; 
Смежные вопросы