PHP: Вставить значение базы данных в другой массив php

#php #sql #arrays

#php #sql #массивы

Вопрос:

У меня есть 2 указателя даты на моей странице «От» и «Кому». Пользователь выберет дату для каждого значения:

 FromDate: 01/JUL/2012     ToDate: 31/OCT/2014
  

И это мой запрос:

   $query = mssql_query("SELECT count(startdate) as start
                        FROM user 
                        WHERE startdate between '01 JUL 2012' and '31 OCT 2014' 
                        GROUP BY  month(startdate), year(startdate) 
                        ORDER BY  month(startdate) ASC, year(startdate) ASC");
  

Я хочу подсчитать все записи, начиная с выбранной пользователем даты, сгруппировать их по годам и месяцам и сохранить в php array.

Пример результата:

           JUL AUG SEP OCT NOV DEC
  

Array2012 = ("52","45","25","62","11","41")

           JAN  FEB  MAR   DEC
  

Array2013 = ("52","45","25",......,"35")

          JAN  FEB  MAR   OCT
  

Array2014 = ("52","45","25",.......,"47")

Как я могу зациклить значения из базы данных, чтобы получить эти результаты?

Ответ №1:

Вам нужно изменить пару вещей :

  • Добавьте год в поля выбора и используйте его для вставки вашего результата в массив
  • Измените свой порядок: сначала отсортируйте по году, затем по месяцу

В результате код будет выглядеть следующим образом :

 $values = array();
$lastYear = 0;

$query = mssql_query("SELECT count(startdate) as start, 
                    year(startdate) AS year
                    FROM user 
                    WHERE startdate between '01 JUL 2012' and '31 OCT 2014' 
                    GROUP BY  month(startdate), year(startdate) 
                    ORDER BY  year(startdate) ASC, month(startdate) ASC");

while ($data = mssql_fetch_array($query)) {
    if ($data['year'] != $lastYear) {
        $lastYear = $data['year'];
        $values[$data['year']] = array();
    }
    array_push($values[$data['year']], $data['start']);
}

print_r($values);
  

значения $ будут содержать :

 Array(
[2012] => Array("52","45","25","62","11","41"}),
[2013] => Array("52","45","25",......,"35"),
[2014] => Array("52","45","25",.......,"47")
)
  

Комментарии:

1. Это был быстрый ответ.. Спасибо.. Я попробую это позже и сообщу вам результат.. Большое спасибо.

2. как распечатать результаты.. я попробовал то, что вы сказали, и это мне ничего не дало, страница пуста..

3. Вы можете использовать print_r($values); чтобы показать, что хранится в массиве

4. выводится пустой .. о, теперь я вижу, что в array_push это должно быть $data [‘start’] .. Спасибо..

Ответ №2:

Попробуйте использовать что-то вроде этого фрагмента кода для перебора возвращаемых значений из запроса к БД:

 $query = mssql_query("SELECT count(startdate) as start
                    FROM user 
                    WHERE startdate between '01 JUL 2012' and '31 OCT 2014' 
                    GROUP BY  month(startdate), year(startdate) 
                    ORDER BY  month(startdate) ASC, year(startdate) ASC");
    if($query == FALSE){
        die(mysql_error());
    }
    while($row = mysql_fetch_array($query)){
        echo $row['startdate']
    }
  

Надеюсь, я правильно вас понял и что я мог бы помочь.

Мир

Комментарии:

1. Спасибо за ответ. Я пробовал такой цикл, и у меня это сработало, но я не знаю, как я могу сохранить значение в другом массиве.