Новостной архив. Группировка года и месяца не работает

Статус
В этой теме нельзя размещать новые ответы.

akl

Новичок
Доброй ночи. В процессе создания новостного архива появились ошибки.
Функции, участвующие в выводе данных
PHP:
public function postArchiv() {
    $query = "SELECT DATE_FORMAT(date,'%Y') as 'year', DATE_FORMAT(date,'%m') as 'month' FROM news JOIN aurhor ON news.aurhor_id = aurhor.aurhor_id GROUP BY DATE_FORMAT(date,'%Y'),DATE_FORMAT(date,'%m')";
    $result = mysql_query($query) or die('Error, query failed');
    $archivs = array();
    while ($row = mysql_fetch_assoc($result)) {
        $archivs[] = $row;
    }
    return $archivs;
}
 
public function selectMonth($data) {
    $month = array(
        01 => 'Январь',
        02 => 'Февраль',
        03 => 'Март',
        04 => 'Апрель',
        05 => 'Май',
        06 => 'Июнь',
        07 => 'Июль',
        08 => 'Август',
        09 => 'Сентябрь',
        10 => 'Октябрь',
        11 => 'Ноябрь',
        12 => 'Декабрь',
    );
 
    foreach ($month as $key => $value) {
        if (in_array($key, $data)) {
            echo $value . '<br>';
            return $value;
        }
    }
   
}
Вывод информации:
PHP:
<?PHP foreach ($archivs as $archiv): ?>
    <ul>
        <li>
            <?PHP echo $archiv['year'] ?>
            <ul>
                <li>
                    <?PHP $connect->selectMonth($archiv) ?>
                </li>
            </ul>
        </li>
    </ul>
<?PHP endforeach; ?>
Проблема: группировка годов происходит только в том случае, если совпадают месяцы новостей относящихся к этому году. В противном случае: год и месяц выводятся отдельно. Вот результат работы кода, приведенного выше
PHP:
2011
    Июнь
2012
    Май
2012
    Июнь
2012
    Ноябрь
А вот, если убрать группировку по месяцам GROUP BY DATE_FORMAT(date,'%m')
PHP:
2011
    Июнь
2012
    Июнь
А вот так, если вообще без группировки
PHP:
2012
    Июнь
2012
    Июнь
2012
    Июнь
2012
    Май
2011
    Июнь
2011
    Июнь
2012
    Ноябрь
Ткните носом в ошибку
 

baev

‹°°¬•
Команда форума
akl, зачем тут вообще группировка? По-моему, Вам достаточно «ORDER BY».
 

akl

Новичок
akl, зачем тут вообще группировка? По-моему, Вам достаточно «ORDER BY».
Так подождите, ORDER BY - это сортировка, по алфавиту, по убыванию, по возрастанию и тд...А мне нужно сгруппировать одинаковые года и месяца. Вот как здесь
 

Вложения

Фанат

oncle terrible
Команда форума
почему бы не группировать сразу по DATE_FORMAT(date,'%Y-%m')?
 

Фанат

oncle terrible
Команда форума
Так подождите, ORDER BY - это сортировка, по алфавиту, по убыванию, по возрастанию и тд...А мне нужно сгруппировать одинаковые года и месяца. Вот как здесь
Вот "как здесь" оно и группирует.
Не вижу проблемы.
 

akl

Новичок
Вот переписал с ORDER BY
PHP:
SELECT DATE_FORMAT(date,'%Y') as 'year', DATE_FORMAT(date,'%m') as 'month' FROM news JOIN aurhor ON news.aurhor_id = aurhor.aurhor_id ORDER BY `year`  DESC
+------+-------+
| year | month |
+------+-------+
| 2012 | 06 |
| 2012 | 06 |
| 2012 | 06 |
| 2012 | 05 |
| 2012 | 11 |
| 2011 | 06 |
| 2011 | 06 |
+------+-------+
Совсем не то, что надо.
 

AmdY

Пью пиво
Команда форума
а групировку зачем совсем убрали?

и не понятно, зачем вы джойните авторов.
 

akl

Новичок
а групировку зачем совсем убрали?
и не понятно, зачем вы джойните авторов.
PHP:
SELECT DATE_FORMAT(date,'%Y') as 'year', DATE_FORMAT(date,'%m') as 'month' FROM news JOIN aurhor ON news.aurhor_id = aurhor.aurhor_id GROUP BY DATE_FORMAT(date,'%Y'),DATE_FORMAT(date,'%m') ORDER BY DATE_FORMAT(date,'%Y'),DATE_FORMAT(date,'%m')
+------+-------+
| year | month |
+------+-------+
| 2011 | 06 |
| 2012 | 05 |
| 2012 | 06 |
| 2012 | 11 |
+------+-------+
Все равно года не группирует. Автора на тот случай, если я захочу вывести их, например, с заголовками новостей или ещё где-нибудь, может я не буду их выводить, тогда удалю, они не чем сейчас не мешают.
Автор, а зачем ты часть индексов в восьмеричной написал?
Всмысле?
 

baev

‹°°¬•
Команда форума
akl, во-первых, в «ORDER BY» надо ещё «`month`» добавить.
Во-вторых, выводить год/месяц только один раз — проверяя на совпадение с предыдущим выведенным значением.
 

akl

Новичок
во-первых, в «ORDER BY» надо ещё «`month`» добавить.
Так в запросе есть month, в самом конце
PHP:
ORDER BY DATE_FORMAT(date,'%m')
Во-вторых, выводить год/месяц только один раз — проверяя на совпадение с предыдущим выведенным значением.
Вы про скл?
 

Фанат

oncle terrible
Команда форума
akl
но ведь сейчас заголовки не выводятся. зачем джойнить автора?
и зачем выводить случайную новость в этом списке?

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

akl

Новичок
Уже 3 раза писал, что я хочу. Хочу, чтоб было так:
PHP:
2011
    Июнь
2012
    Май
    Июнь
    Ноябрь
Какая случайная новость? Это новостной архив, там не место случайностям
 

AmdY

Пью пиво
Команда форума
akl
ну так у тебя проблема не с запросом, а в цикле где ты выводишь данные
 

AmdY

Пью пиво
Команда форума
PHP:
$data = postArchiv();
$dataByYear = array();
foreach($data AS $v) {
    $dataByYear[ $v['year '] ][] = $v;
}
 

Фанат

oncle terrible
Команда форума
Случайная за месяц. Если в этом списке выводить новость, то выберется только случайная.
Уже 3 раза писал
два. один раз привел картинку, на которой выводится
2011 Июнь
2012 Май
2012 Июнь
2012 Ноябрь
тебе сказали, как это сделать.
ты передумал. захотел по-другому.
где гарантия, что желания снова не изменятся?

Тебе сказали, как сортировать коротко, одним полем. ты все равно пишешь колбасу из четырёх(!) date_format-ов и ещё к ним зачем-то приплетаешь бессмысленный джойн.
Если ты не уважаешь себя, то уважай окружающих.
Во-первых, определись со своими желаниями.
Во-вторых, делай то что тебе говорят.
В-третьих, не перегружай свои вопросы бессмысленным кодом.
 

akl

Новичок
AmdY, может я вас неправильно понял, но сморите
PHP:
$dataByYear = array();
foreach($data AS $v) {
    $dataByYear[$v['year']][] = $v;
    
    echo $v['year'] . '<br>';
    echo $v['month'] . '<br>';
}
В итоге вывод такой же как и я в получал своим циклом
2011
06
2012
05
2012
06
2012
11

Фанат, я не на форум домохозяек попал, не надо перегружать меня и всех, кто читает ваши сообщения советами как жить. Меньше текста - больше кода. DATE_FORMAT я изменю, для тестирования мне он не мешает. JOIN только вам кажется бессмысленным, для меня он имеет смысл.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху