статистика
как сделать?
пока ничего умнее, чем с помощью date() определить текущий год и месяц, а потом через mktime() получить время на начало месяца и потом выбрать из бд те записи, в которых соответсвтующее поле больше полученного времени, не придумал...
а можно по-другому как-нить?
тока плз не предлагайте хранить время записи в другом формате...
есть некоторые записи в бд... и по ним надо вывести статистику за месяц... (имеется в виду по дате помещения в бд, поле хранит time() времени записи)
как сделать?
пока ничего умнее, чем с помощью date() определить текущий год и месяц, а потом через mktime() получить время на начало месяца и потом выбрать из бд те записи, в которых соответсвтующее поле больше полученного времени, не придумал...
а можно по-другому как-нить?
тока плз не предлагайте хранить время записи в другом формате...
Не ясно что хранится в БД (статистика чего?) и что хочется на выходе. В MySQL есть два типа полей, которые ничуть не хуже time, а именно DATETIME и TIMESTAMP.
Не ясно что хранится в БД (статистика чего?) и что хочется на выходе. В MySQL есть два типа полей, которые ничуть не хуже time, а именно DATETIME и TIMESTAMP.
в принципе не важно что хранится.. просто есть таблица с некоторыми полями одно из которых дата, а по одному из остальных выводится критерий статистики...
просто если буду тип переделывать - мне там менять много чего прийдётся... поэтому надо с time()
в принципе реализовал как написал
$year = date("Y");
$t = mktime(0, 0, 0, $month, 0, $year)
// SELECT COUNT(*)....WHERE datedob > $t
просто думаю будет ли это быстро работать при больших размерах бд (так как это дело повторяется в цикле для каждого поля критерия статистики....
в принципе не важно что хранится.. просто есть таблица с некоторыми полями одно из которых дата, а по одному из остальных выводится критерий статистики...
просто если буду тип переделывать - мне там менять много чего прийдётся... поэтому надо с time()
в принципе реализовал как написал
$year = date("Y");
$t = mktime(0, 0, 0, $month, 0, $year)
// SELECT COUNT(*)....WHERE datedob > $t
просто думаю будет ли это быстро работать при больших размерах бд (так как это дело повторяется в цикле для каждого поля критерия статистики....
Приведи в теге PHP или CODE весь текст, относящийся к статистике. Тогда я смогу сказать как это обобщить запросом. По крайней мере постараюсь.
А сколько раз это повторится в цикле?
Приведи в теге PHP или CODE весь текст, относящийся к статистике. Тогда я смогу сказать как это обобщить запросом. По крайней мере постараюсь.
А сколько раз это повторится в цикле?
ну хз как привести текст относящийся к статистике...
сейчас попробую показать как всё происходит...
таблица aaaa
поле id
остальные поля неважны
таблица bbbb
поле id
поле parent - связано с aaaa.id
поле datedob - дата добавления записи
остальные поля неважны
вот нужна статистика - сколько в таблице bbbb полей каждого типа aaaa (aaaa.id = bbbb.parent) и сколько полей каждого типа добавлено за последний месяц...
то есть в цикле выборки (так как время начала месяца-то будет общее) будет столько запросов сколько записей в aaaa
могу только сказать, что записей в aaaa не больше десятков...
а в bbbb порядка >10k записей...
c JOINами для подсчёта не разобрался... поэтому пришлось вот так вот в цикле делать...
FROM aaaa a
LEFT JOIN bbbb b ON b.parent=a.id AND b.datedob>=$your_datedob
GROUP BY a.id
ORDER BY name
Я симпровизировал и добавил в табличку aaaa поле, по которому захочется сортировать. Все просто, сделано одним скриптом. Подходит?
правда на скорость не тестил... ну да ладно...
суперски... работает, пасиба...
правда на скорость не тестил... ну да ладно...
Протестируй, ты разницы не заметишь, т.к. это всего один лефт джоин. Если хочешь реально очень высокой скорости, создай простой индекс по полю bbbb.parent или как там его. Тогда сможешь работать с 100M, а не 10k, того не замечая.
такс, терь надо усложнить задачу... попробую описать...
таблица aaaa
поле id
остальные поля неважны
таблица bbbb
поле id
поле parent - связано с aaaa.id
поле razd - связано с cccc.id
поле datedob - дата добавления записи
остальные поля неважны
таблица cccc
поле id
поле parent - cccc.id
остальные поля неважны
в-общем так, таблица cccc - разделы... с древовидной структурой...
записи в bbbb - связаны с cccc (по полю razd)
надо вывести так же статистику по aaaa.id но для каждого cccc.id и cccc.parent = 0 с учётом всех подразделов cccc
я рекурсией делал спуск по дереву cccc и потом просто складываются все...
может тоже быстрее можно?
Если иерархия ограничена, например, тремя уровнями, то можно сделать тоже одним запросом. Привести, или нужна именно рекурсия?
по идее вложенность неограничена, но на практике больше 1-2х вложения не будет по идее... приведи плз...
по идее вложенность неограничена, но на практике больше 1-2х вложения не будет по идее... приведи плз...
Ваша задача алогична, т.к. если мы сохраняем связку в запросе между aaaa и bbbb, то у нас получается ошибка в самой логике запроса. Попробуйте описать ситуацию еще раз. Или я что-то не понимаю...
в-общем, есть разделы, подразделы (cccc)... в них помещаются заявки (bbbb) разных видов (aaaa)... вот надо по каждому разделу с учётом подразделов вывести статистику....
надо вывести статистику сколько предложений (лотов) каждого из типов предложения в каждом из разделов включая подразделы (родительский fk) было всего и сколько из этого за месяц... типы товара не важны... остальные таблицы тоже...
вот говорю что в принципе в разделах подразделов не больше 2х...
1. Выведем сколько товаров bbbb в каждом корневом каталоге cccc WHERE cccc.parent=0
FROM bbbb b
INNER JOIN cccc c ON c.id=b.parent AND c.parent=0
GROUP BY b.id
2. Выводим то же самое для каждого парента, но с учетом двух уровней подкаталогов
FROM cccc c
LEFT JOIN bbbb b ON b.parent=c.id
LEFT JOIN cccc d ON d.parent=c.id
LEFT JOIN bbbb e ON e.parent=d.id
LEFT JOIN cccc f ON f.parent=d.id
LEFT JOIN bbbb g ON g.parent=f.id
LEFT JOIN cccc h ON h.parent=f.id
WHERE c.parent=0
GROUP BY c.id
3. Теперь работаем не с cccc, а aaaa (прошу прощения за тавтологию)... И ничего не получается..