Диапазон дат PHP (без использования календарной таблицы MySql) - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть диапазон данных, который мне нужен, чтобы получить результаты из базы данных.Обычная проблема, не каждый день есть записи, и это искажает мои графики.Мне нужно дополнить результаты нулями и задать вопрос о наилучшем способе.

У меня есть процедура php, которая заполняет массив правильным количеством дней, и мне нужно циклически проходить по моему mysql.recordset, вставляязначения, если в цикле есть один в массиве для этого дня, или если нет, оставьте его равным нулю.

Каков наилучший способ выполнить поиск / сравнение, не обходя весь набор записей впосмотрите, есть ли какие-либо данные для даты, которую я обрабатываю в цикле.

Если предположить, что есть 90 дней, то это цикл по 90 записям для каждого дня (90 * 90, сравнение 8100, что пугает меня)

В наборе данных никогда не будет более 366 записей.

Использование последних версий PHP.

1 Ответ

0 голосов
/ 01 февраля 2012

Создание двумерного ассоциативного массива с датой, являющейся первым измерением.Таким образом, вы создаете массив $ allrecords, где ключами являются «2012-01-01» и т. Д., И значение каждого из них является ассоциативным массивом, который имитирует другую структуру ваших данных с нулями по всему.Поэтому, если ваши данные выглядят так:

DATE        FIELDA   FIELDB   FIELDC
2012-01-01      10       20       30
2012-01-03       1        2        3

Вы создаете массив так, чтобы

$allrecords["2012-01-01"]["FIELDA"]=0;
$allrecords["2012-01-01"]["FIELDB"]=0;
$allrecords["2012-01-01"]["FIELDC"]=0;
$allrecords["2012-01-02"]["FIELDA"]=0;
etc.

Вы просматривали ваш набор данных только один раз, делая что-то вроде

$allrecords["2012-01-01"]["FIELDA"]=10;
$allrecords["2010-01-01"]["FIELDB"]=20;
$allrecords["2010-01-01"]["FIELDC"]=30;
get next record
$allrecords["2010-01-03"]["FIELDA"]=1;
etc.

Затем вы перебираете массив для вывода.

Или, если вы можете изменить запрос, вы можете создать временную таблицу с желаемыми датами, присоединить ее к результатам и привести данные с помощьюпробелы заполнены.

...