Сортировка данных по дате

Sunday

Cōgitō ergō sum
Регистрация
13 Дек 2009
Сообщения
823
Реакции
342
Подскажите пожалуйста, как с помощью PHP лучше отсортировать полученные данные из базы по дате?
К примеру я выбрал все фотографии за последние 10 дней. Мне нужно вывести эти фотки по датам. Т.е.

20-е марта
[] [] [] [] []

21-е марта
[] [] [] [] []

и т.д.

Не хочется на каждую дату делать отдельный запрос - это печально и не правильно.
 
например в массив сохранять, в котором индекс это дата
PHP:
$photo[$row['date']][] = $row['photo'];
получится массив с датами и фото для каждой даты.

В MySQL базе тоже возможно сгрупировать по дате:
Код:
SELECT GROUP_CONCAT(photo) spisok_fotok, date
FROM fotki
GROUP BY date
ORDER BY date
получится список дат и фоток через запятую, а в php потом список с запятыми через explode сконвертировать в массив
PHP:
$fotki = explode(",", $row['spisok_fotok']);
 
Погуглил я по этому вопросу.
Вроде всё просто на простых примерах, в которых выборка из одной таблицы.
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Но у меня что-то ничего не выходит с моей выборкой из двух таблиц.
Запрос у меня такой
Код:
SELECT
    GROUP_CONCAT(A.photo_name) as photo_name,
    DATE_FORMAT(B.date_add,'%d.%m.%Y') as date
FROM
    photo A, posts B
WHERE
    A.id_post=B.id
GROUP BY date
ORDER BY date
Далее, как было предложено, в цикле через explode я вывел список всех фоток отсортированных по дате. Но получается, что выводится всё по одной фотке из каждого поста, т.к. я использую $fotki[0]. Не догоняю, как вывести все существующие фотки каждого поста для определенной даты. :nezn:
Примерно так:
Код:
 while($row=mysql_fetch_assoc($query)) {
    $fotki = explode(",", $row['photo_name']);
    echo '<img src="/images/$fotki[0]" />';
}
В каком месте я нуб?
 
А что с запросом? Нормальный запрос.

так как $fotki это массив, вывести все элементы например с циклом foreach
PHP:
foreach($fotki as $fotka){
    echo "<img src=\"/images/$fotka\" />";
}
 
Да, спасибо, с этим все в порядке.
Но с датой не могу разобраться. У меня выводится дата для каждой фотки, а не для группы :facepalm:
 
надо сначала дату вывести, а потом цикл с фотками
PHP:
while($row=mysql_fetch_assoc($query)) {
    echo $row['date'];
    $fotki = explode(",", $row['photo_name']);
    foreach($fotki as $fotka){
        echo '<img src="/images/'.$fotka.'" />';
    }
}
 
Почти получилось. А почти, потому что получилось не так, как хотелось.
Сейчас получается, что дата выводится для каждой публикации.
Т.е. так
20.03.2012
[][]
20.03.2012
[]
20.03.2012
[][][][]

А хотелось бы
20.03.2012
[][][][][][][]

Может еще что-то в запросе подшаманить нужно?
 
а может в запросе группирует не по сформатированной дате в которой есть время
GROUP BY B.date_add
поэтому могут попаатся одинаковые дни но в разных группах, потому что время разное
если было
DATE_FORMAT(B.date_add,'%d.%m.%Y') AS date
то групировать надо по тому же формату даты
GROUP BY date
или
GROUP BY DAY(B.date_add)
когда группирование не более месяца
 
Да, точно, что-то я протупил, так и есть.
Мучался, мучался, а в итоге GROUP_CONCAT со своим ограничением 1024 сделал мне большой облом... некоторые фотки не помещаются в этот лимит... :hi:

Я так понимаю, что если это виртуальный хостинг, то только ТП в состоянии увеличить этот лимит?
 
а если перед запросом сделать ещё запрос на повышения ограничения
Код:
SET SESSION group_concat_max_len = 1000000;
 
Назад
Сверху