Проблемы при заказе sql результатов по нескольким столбцам

year  monthnumber  sales
------------------------
2014       8       2800
2014       9       3000
2013      11       2120
2014       8       2700
2013       7       2600
2013      12       2100

Мне нужно отобразить все уникальные комбинации столбцов «год» и «месяц». У меня проблемы с упорядочением результатов, чтобы первая комбинация (сентябрь 2014 г.) отображалась первой. Результаты должны быть:

september 2014
august 2014
december 2013
november 2013
july 2013

Код ниже дает мне следующие результаты (так что при заказе месяцев что-то идет не так):

september 2014
august 2014
july 2013
december 2013
november 2013

Php / Sql:

<?php
$sql = "SELECT DISTINCT (case  when monthnumber = '1' then 'january'
when monthnumber = '2' then 'february'
when monthnumber = '3' then 'march'
when monthnumber = '4' then 'april'
when monthnumber = '5' then 'may'
when monthnumber = '6' then 'june'
when monthnumber = '7' then 'july'
when monthnumber = '8' then 'august'
when monthnumber = '9' then 'september'
when monthnumber = '10' then 'october'
when monthnumber = '11' then 'november'
when monthnumber = '12' then 'december'
end) AS monthname, year from `exampletable` ORDER BY year DESC, monthnumber DESC";

$stmt = $pdo->prepare($sql);
$stmt->execute();

if($stmt->rowCount())
{
while ($result = $stmt->fetch(PDO::FETCH_ASSOC))
{
?>

<?php echo strtolower($result['monthname']);?> <?php echo $result['year'];?>

<?php
}// end while
}// end if
else {
echo '0 results';
}// end else
?>

Что мне здесь не хватает?

0

Решение

Я подозреваю, что вам нужно сыграть MonthNumber для INTEGER в ORDER BY пункт.

ORDER BY year DESC, CAST(monthnumber AS UNSIGNED) DESC
1

Другие решения

если MontNumber — строка, то порядок сортировки выполняется сначала по первому символу, а затем по второму символу; который должен давать что-то вроде следующего при сортировке по убыванию:

9
8
7
6
5
4
3
2
12
11
10
1

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

1

По вопросам рекламы [email protected]