#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. Спасибо за ответ. Я пробовал такой цикл, и у меня это сработало, но я не знаю, как я могу сохранить значение в другом массиве.