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
?>
Что мне здесь не хватает?
Я подозреваю, что вам нужно сыграть MonthNumber
для INTEGER
в ORDER BY
пункт.
ORDER BY year DESC, CAST(monthnumber AS UNSIGNED) DESC
если MontNumber — строка, то порядок сортировки выполняется сначала по первому символу, а затем по второму символу; который должен давать что-то вроде следующего при сортировке по убыванию:
9
8
7
6
5
4
3
2
12
11
10
1
Как указано в другом ответе, вы должны сначала преобразовать свой MonthNumber из строки в целое число.