Непростая сортировка и вывод по дате записи

PhantomUA

Инквизитор
Модератор
Регистрация
2 Июл 2006
Сообщения
759
Реакции
1.098
Что-то после тяпницы голова не варит... :D
Помогите реализовать... или хотя бы направьте в нужное русло :ah:
Есть таблица с сообщениями и датами их размещения..
Код:
  `id` int(11) NOT NULL auto_increment,
  `to_id` int(11) NOT NULL,
  `from_id` int(11) NOT NULL,
  `senddate` datetime NOT NULL default '0000-00-00 00:00:00',
  `is_new` int(11) NOT NULL default '1',
  `message` text NOT NULL,
Нужно реализовать вывод в виде:
1353156840-clip-49kb.jpg

Ищется путь реализации вывода записей с разделением надписями: сегодня, вчера, неделю/две недели назад.. месяц назад и т.п.
 
  • Заблокирован
  • #2
Спешу тебя огорчить - данная задача ложится не на базу данных, а на php. От базы данных требуется лишь сортировать вывод по дате. А уже в цикле вывода php с помощью Для просмотра ссылки Войди или Зарегистрируйся (PHP 5 >= 5.3.0) вставлять в цикл вывода разделители
 
Не понимаю сложность задачи, на выходе по идеи массив данных и каждое сообщение имеет дату, так на выходеи смотреть какая у него давность, или есть принципиальность использовать ресурсы DB, если да, то только if помогут, указанием в качестве поля, и проверка по дате.

Если нужно выбрать сообщения разной давности, такая же история, простой where и диапазон дат
 
Спешу тебя огорчить - данная задача ложится не на базу данных, а на php.
Мой косяк - изначально тема была в php создана...
Спешу тебя огорчить в ответ - зависит от количества записей, которые вернёт запрос к бд.
Я сразу прикинул, что в ответ мы можем получить миллион строк и для вывода 10 записей с шагом по времени сортировку делать на php будет расточительством, потому тему и перенёс в раздел БД.

2 TC делал бы с помощью strtotime ("-1 day"), strtotime ("-1 week"), strtotime ("-1 month"), ....
как понимаешь этот ряд вернёт метки времени для вчера, неделю назад, месяц назад...
 
Мой косяк - изначально тема была в php создана...
Спешу тебя огорчить в ответ - зависит от количества записей, которые вернёт запрос к бд.
Я сразу прикинул, что в ответ мы можем получить миллион строк и для вывода 10 записей с шагом по времени сортировку делать на php будет расточительством, потому тему и перенёс в раздел БД.
Ну миллиона не будет.. так как выборка идет по определенному id пользователя а не все сразу ))
Поэтому хотелось бы через PHP реализовать а не делать отдельные выборки с интвервалом дат...
2 TC делал бы с помощью strtotime ("-1 day"), strtotime ("-1 week"), strtotime ("-1 month"), ....
как понимаешь этот ряд вернёт метки времени для вчера, неделю назад, месяц назад...
Соотвественно как написал немного выше получится что надо делать отдельные запросы с интвервалами дат... А хотелось бы с помощью PHP разбить на блоки/масивы после 1 запроса к базе :)

4 запроса к базе:
А ответ вот тут:
Для просмотра ссылки Войди или Зарегистрируйся
Я в курсе таких запросов )) Практики хватает.. А чего хотелось бы - написал выше ))
Чтобы самому пока придумать - нужно чтобы голова немного просветлела... наверно это уже будет завтра.. если до того времени никто не подскажет ))
 
  • Заблокирован
  • #7
Мой косяк - изначально тема была в php создана...
Спешу тебя огорчить в ответ - зависит от количества записей, которые вернёт запрос к бд.
Я сразу прикинул, что в ответ мы можем получить миллион строк и для вывода 10 записей с шагом по времени сортировку делать на php будет расточительством, потому тему и перенёс в раздел БД
да ктож будет миллион строк выводить на одной странице:eek:
там уже любой браузер с ума сойдёт от такого объёма.
Да и кто говорит про сортировку? нужно лишь вставить в цикл вывода разделитель и всё!
ТС, как конкретно надо разделять? по дням, неделям и т.д.
 
Можно поидее в PHP сравнить разницу даты размещения и текущей даты и если она больше какого-то значения пихать в разные масивы... А в запросе к бд сделать сортировку от старых записей к новым... А на выводе просто сделать проверку если есть в масиве данные и если есть то выводить в нужный блок... Как один с вариантов реализации наверно пойдет... буду дальше думать...


Плодить запросы к БД не хочется.. так как и других хватает :)

Да и кто говорит про сортировку? нужно лишь вставить в цикл вывода разделитель и всё
ТС, как конкретно надо разделять? по дням, неделям и т.д.
Да, что-то подобное... например: сегодня, вчера, неделю назад, месяц назад и год назад...
Вот о разделителе и идет речь.. как его правильно и оптимально реализовать :) и чтобы записи выводило отдельными блоками.. так как их придется наверно через jquery свернуть/развернуть :)
 
  • Заблокирован
  • #9
Вот о разделителе и идет речь.. как его правильно реализовать :) и чтобы записи выводило отдельными блоками.. так как их придется наверно через jquery свернуть/развернуть :)
Ну тогда просто впихнуть разделитель тут не в помощь.
Придётся сдаётся мне делать несколько циклов для каждого интервала. Правда это уже попахивает быдлокодом.
 
Ну тогда просто впихнуть разделитель тут не в помощь.
Придётся сдаётся мне делать несколько циклов для каждого интервала. Правда это уже попахивает быдлокодом.
Не обязательно... есть результат с БД.... делаем перебор элементов (foreach например) и сравниваем дату с текущей... дальше через if или switch раскидываем по массивам в зависимости от разницы дат... Массивы передаем в шаблонизатор... в нем проверка на наличие в массиве данных... есть - вывод в блоке.. Нет - проверка следующего массива... пока оптимальнее ничего не придумал... если до утра ничего лучшего не посоветуют - со свежей головой постараюсь еще подумать :)
 
Назад
Сверху