$line = mysql_fetch_row(mysql_query("SELECT `electro1`, `electro2`, `electro3`, `electro4`, `electro5` FROM `energobalans2012` WHERE `date` BETWEEN '2011-12-15' AND '2012-01-31' ORDER BY `date`"));
он выбирает только одну запись, а мне нужно все даные за этот переод, плюс не пойму как к ним потом обращатся, скажем
$rez=$line[0]+$line[1];наверное не подойдет, это будет двумерный масив? скорее так?:
$rez=$line[0][0]+$line[0][1];
Помогите плиз, пробежался по форуму, нашел похожую проблему но боюсь что сам не разберусь...
Спустя 14 минут, 1 секунда (28.01.2012 - 23:39) dadli написал(а):
Skesh
ваш запрос правилни, попрубуите так написать
ваш запрос правилни, попрубуите так написать
$res = mysql_query("SELECT `electro1`, `electro2`, `electro3`, `electro4`, `electro5` FROM `energobalans2012` WHERE `date` BETWEEN '2011-12-15' AND '2012-01-31' ORDER BY `date`")
or die(mysql_error());
while($row = mysql_fetch_assoc($res)) {
echo $row['electro1']." - ".$row['electro2'].'...'."<br>";
}
Спустя 5 минут, 55 секунд (28.01.2012 - 23:45) Winston написал(а):
Напиши print_r($line); и посмотри какой там массив.
А насчет сложения, попробуй так
А насчет сложения, попробуй так
echo (int)$line[0]+(int)$line[1];
Спустя 3 минуты, 13 секунд (28.01.2012 - 23:48) YVSIK написал(а):
есть такая функция
далее методом перебора с помощью цикла как пример
$var = array mysql_fetch_assoc ($line)
// или для двумерного
$var= array mysql_fetch_array ($line)
далее методом перебора с помощью цикла как пример
while($var)
{// как пример выборки 10 рядов
echo ($var<=10) ;
}
Спустя 1 минута, 43 секунды (28.01.2012 - 23:50) Skesh написал(а):
dadli спасибо помогло. Я пытаюсь оптимизировать запрос скажем раньше я в цыкле задавал дату и делал расчеты, типа так:
немного почитал и добрые люди подсказали что количество обращений к БД нужно свести к минимуму, тогда скрипт работать будет быстрее, тот способ который Вы предложили ефективнее даного? ведь я смотрю в цикле while все тоже количество обращений??? Если я не прав не смейтесь сильно B) я просто пытаюсь разобраться...
$rez=0;
for ($year>=2011; $year<=2012; $year++)
{
for ($month>=1; $month<=12; $month++)
{
$line = mysql_fetch_row(mysql_query("SELECT `electro1`, `electro2`, `electro3`, `electro4`, `electro5` FROM `energobalans2012` WHERE `date`='$year-$month-01'"));
for ($i>=0; $i<=4; $i++)
{
$rez=$rez+$line[$i];
}
}
echo $rez;
}
немного почитал и добрые люди подсказали что количество обращений к БД нужно свести к минимуму, тогда скрипт работать будет быстрее, тот способ который Вы предложили ефективнее даного? ведь я смотрю в цикле while все тоже количество обращений??? Если я не прав не смейтесь сильно B) я просто пытаюсь разобраться...
Спустя 12 минут, 58 секунд (29.01.2012 - 00:03) dadli написал(а):
Skesh
сделать запроси в цикле ето плохо и нужна максимални избегать от него, а маём примере (ето не маё, ето стандартни варянт) происходит обрашение к бд один раз, а вцикле происходит толко перебор полученних данних из запроса. конечно ето лучшее
сделать запроси в цикле ето плохо и нужна максимални избегать от него, а маём примере (ето не маё, ето стандартни варянт) происходит обрашение к бд один раз, а вцикле происходит толко перебор полученних данних из запроса. конечно ето лучшее
Спустя 9 часов, 57 минут, 35 секунд (29.01.2012 - 10:00) Skesh написал(а):
еще вопрос: мне нужно вывести все даные за месяц, если их нету за какойто месяц то нужно вывести 0, в моем варианте это происходит, а в Вашем идет выборка только существующих записей, и если скажеи нет записи за 12 месяц то оно даст не 0 а просто пропустит его, как быть? можно вместо while использовать for вот скажем так будет правильно?:
ну и сразу там и делать все расчеты, чтобы не создавать еще один цыкл с расчетами, но вот не работает, выдает нули, как быть?
$year1=2012;
$month1=1;
$k1=date("t", strtotime($year1 . "-" . $month1. "-01")); // получаем количество дней в этом месяце
$year2=$year1;
$month2=$month1+1;
$k2=date("t", strtotime($year2 . "-" . $month2. "-01")); // получаем количество дней в следующем месяце
$line = mysql_query("SELECT `electro1`, `electro2`, `electro3`, `electro4`, `electro5` FROM `energobalans2012` WHERE `date` BETWEEN '$year1-$month1-15' AND '$year2-$month2-$k2' ORDER BY `date`");
for ($i>=0; $i<=$k1+$k2; $i++)
{ $rez=0;
$row = mysql_fetch_assoc($line);
for ($j>=0; $j<=count($row); $j++)
{
$rez=$rez+$row[$j];
}
echo "$i - $rez - ".count($row)."<p>";
}
ну и сразу там и делать все расчеты, чтобы не создавать еще один цыкл с расчетами, но вот не работает, выдает нули, как быть?
Спустя 2 часа, 25 минут, 27 секунд (29.01.2012 - 12:26) dadli написал(а):
Цитата |
если их нету за какойто месяц то нужно вывести 0 |
ето хотели:
$res = mysql_query("какоита запрос")
or die(mysql_error());
if (mysql_num_rows($res) == 0) {
echo 0;
}
else {
while($row = mysql_fetch_assoc($res)) {
echo $row['electro1']." - ".$row['electro2'].'...'."<br>";
}
}
Спустя 24 минуты, 26 секунд (29.01.2012 - 12:50) Skesh написал(а):
не совсем, взгляните на картинку:

у меня там три записи за 01, 03, и 07 число, мне нужно чтобы цикл выводил 7 значений, с 1 по 7 число включительно, если использовать while то он выдаст только те 3 значения за 01, 03, и 07 число, и все, а мне нужно чтобы за 02, 04, 05 и 06 число выдавало нули, вот такой результат:

можно так сделать?

у меня там три записи за 01, 03, и 07 число, мне нужно чтобы цикл выводил 7 значений, с 1 по 7 число включительно, если использовать while то он выдаст только те 3 значения за 01, 03, и 07 число, и все, а мне нужно чтобы за 02, 04, 05 и 06 число выдавало нули, вот такой результат:

можно так сделать?
Спустя 1 час, 50 минут, 38 секунд (29.01.2012 - 14:41) YVSIK написал(а):
при выборке как ? а никак!! выборка будет только та что есть в базе , значит сделать в пустые дни добавлять эти дни пустыми строчками и автоматом присваивать ID тогда и будет выборка пустых полей и то в случае если записать эти нули в базу
как реализовать пустые дни? хм)) либо написать скрипт который это будет делать ежедневно, либо при добовалении новой записии делать запрос, разчет того что есть, и если есть не соответствие скажем дням месяца то добавить
и ещё вариант
писать скрипт который без добавления всегда будет делать эти разсчеты и заносить при твоем выводе недостающие записи
все будет упираться в дни месяцев и вычислений что недостает этих дней по ID
вообщем возможны варианты
как реализовать пустые дни? хм)) либо написать скрипт который это будет делать ежедневно, либо при добовалении новой записии делать запрос, разчет того что есть, и если есть не соответствие скажем дням месяца то добавить
и ещё вариант
писать скрипт который без добавления всегда будет делать эти разсчеты и заносить при твоем выводе недостающие записи
все будет упираться в дни месяцев и вычислений что недостает этих дней по ID
вообщем возможны варианты
Спустя 8 минут, 38 секунд (29.01.2012 - 14:49) Skesh написал(а):
все не подходит, а через for никак нельзя?
Спустя 6 минут, 57 секунд (29.01.2012 - 14:56) Skesh написал(а):
Цитата (YVSIK @ 29.01.2012 - 11:41) |
писать скрипт который без добавления всегда будет делать эти разсчеты и заносить при твоем выводе недостающие записи |
можно кусочек примера? мне не нужно заносить недостающие записи, мне просто нужен расчет чтоб выдавал 0 при них, мне бы кусочек примера, оч прошу...
Спустя 6 минут, 22 секунды (29.01.2012 - 15:03) dadli написал(а):
Skesh
$date1 = '2012-01-01';
$date2 = '2012-01-07';
$res = mysql_query("
SELECT `electro1`, `electro2`,`date` FROM `energobalans2012`
WHERE `date` BETWEEN '".$date1."' AND '".$date2."' ORDER BY `date`")
or die(mysql_error());
$arr_iz_tablic = array();
while($row = mysql_fetch_row($res)) {
array_push($arr_iz_tablic,$row[2]);
}
mysql_data_seek($res,0);
$mas = array();
$start = strtotime($date1);
while ($start <= strtotime($date2)) {
array_push($mas,date("Y-m-d",$start));
$start = $start + (3600*24);
}
foreach ($mas as $v) {
if (in_array($v,$arr_iz_tablic)) {
$row = mysql_fetch_row($res);
echo $row[0]." | ".$row[1].'<br>';
}
else {
echo '0 | 0 <br>';
}
}
Спустя 18 минут, 33 секунды (29.01.2012 - 15:21) Skesh написал(а):
dadli спасибо большое!!! Работает!!! =)
Спустя 35 минут, 56 секунд (29.01.2012 - 15:57) Skesh написал(а):
ээээ запуталься немного, а если мне нужна разница чисел сегоднешнього и предыдущего, если предыдущее=0 то шаг назад еще на одно число, пробывал так:
не работает, да еще и зациклюет, есть идеи?
$i=0;
foreach ($mas as $v) {
if (in_array($v,$arr_iz_tablic)) {
$row = mysql_fetch_row($res);
echo $row[0]." | ".$row[1].'<br>';
$num1[$i]=$row[0];
$num2[$i]=$row[1];
$i++;
}
else {
$num1[$i]=0;
$num2[$i]=0;
$i++;
echo '0 | 0 <br>';
}
}
for ($i>=1; $i<=count($num1); $i++)
{ $psum=$num1[$i-1]+$num2[$i-1];
if ($i>1 AND $psum==0)
{ for ($q<=$i-1; $q>=0; $q--)
{ $psum=$num1[$q]+$num2[$q];
if ($psum>0)
break;
}
}
$x=($num1[$i]+$num2[$i])-$psum;
echo "$i - $x <p>";
}
Спустя 1 час, 6 минут, 43 секунды (29.01.2012 - 17:04) GET написал(а):
Цитата |
foreach ($mas as $v) { if (in_array($v,$arr_iz_tablic)) { $row = mysql_fetch_row($res); echo $row[0]." | ".$row[1].'<br>'; $num1[$i]=$row[0]; $num2[$i]=$row[1]; $i++; |
по-моему пропустил $i=> здесь должно быть foreach ($mas as $i=>$v) {
а ниже я не понял $i++; i-c другого места переменная что ли. Помоему эта строчка вообще не нужна.
Спустя 17 минут, 23 секунды (29.01.2012 - 17:21) Skesh написал(а):
ой пардон цыкл неправильно написал, все работает.
Спустя 1 минута, 1 секунда (29.01.2012 - 17:22) Skesh написал(а):
A.B.C. почему не нужна? а как номер в масиве назначить?
Спустя 2 минуты, 5 секунд (29.01.2012 - 17:24) Skesh написал(а):
A.B.C. да вы правы =) виноват =)
Спустя 2 минуты, 1 секунда (29.01.2012 - 17:27) GET написал(а):
Skesh
Почитай как работает foreach
Когда ты прописываешь в
Почитай как работает foreach
Когда ты прописываешь в
foreach ($mas as $i=>$v)
{
echo $i.'-номер переменной массива, '.$v.'-его значение';
}
Спустя 45 минут, 37 секунд (29.01.2012 - 18:12) Skesh написал(а):
ну все ну вот последний раз спрашиваю и все =)
вот код:
вото результат:
если изменю (+5 дней):
результат:
вопрос: почему последний день всегда 0??? если оно не 0!!
вот код:
$date1 = '2012-01-01';
$date2 = '2012-01-10';
$res = mysql_query("
SELECT `samedate`, `electro1`, `electro2` FROM `1`
WHERE `date` BETWEEN '".$date1."' AND '".$date2."' ORDER BY `date`")
or die(mysql_error());
$arr_iz_tablic = array();
while($row = mysql_fetch_row($res)) {
array_push($arr_iz_tablic, $row[0]);
}
mysql_data_seek($res,0);
$mas = array();
$start = strtotime($date1);
while ($start <= strtotime($date2)) {
array_push($mas,date("Y-m-d",$start));
$start = $start + (3600*24);
}
foreach ($mas as $i=>$v) {
if (in_array($v,$arr_iz_tablic)) {
$row = mysql_fetch_row($res);
$num1[$i]=$row[1];
$num2[$i]=$row[2];
$num3[$i]=$row[0];
}
else {
$num1[$i]=0;
$num2[$i]=0;
$num3[$i]=0;
}
}
for ($i=0; $i<count($num1); $i++)
{
echo "$num3[$i]: $num1[$i]<p>";
}
вото результат:
2012-01-01: 5083
2012-01-02: 5098
2012-01-03: 5113
2012-01-04: 5134
2012-01-05: 5158
2012-01-06: 5182
2012-01-07: 5200
2012-01-08: 5216
2012-01-09: 5231
0: 0
если изменю (+5 дней):
$date1 = '2012-01-01';
$date2 = '2012-01-15';
результат:
2012-01-01: 5083
2012-01-02: 5098
2012-01-03: 5113
2012-01-04: 5134
2012-01-05: 5158
2012-01-06: 5182
2012-01-07: 5200
2012-01-08: 5216
2012-01-09: 5231
2012-01-10: 5252
2012-01-11: 5275
2012-01-12: 5303
2012-01-13: 5324
2012-01-14: 5344
0: 0
вопрос: почему последний день всегда 0??? если оно не 0!!
Спустя 42 минуты, 19 секунд (29.01.2012 - 18:54) GET написал(а):
Skesh
у тебя несколько массивов $arr_iz_tablic, $mas
сделай для них foreach и помотри их содержимое поймешь откуда вылазит 0.
у тебя несколько массивов $arr_iz_tablic, $mas
сделай для них foreach и помотри их содержимое поймешь откуда вылазит 0.
Спустя 4 минуты, 36 секунд (29.01.2012 - 18:59) GET написал(а):
Я имею ввиду внутрь foreach () вставь
{echo} сделай отладку
{echo} сделай отладку

Спустя 26 минут, 1 секунда (29.01.2012 - 19:25) Skesh написал(а):
боюсь это для меня сложновато
что куда встаивть? можете написать?

_____________
*пускает слюну, глядя на код* :)