Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запрос к бд
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Запрос к бд

Страниц (3): [1] 2 3 »
 

1. Ejik - 08 Апреля, 2009 - 15:08:56 - перейти к сообщению
Всем здравствуйте, помогите построить запрос, есть запрос к базе он вытаскивает всех сотрудников у кого день рождения в текущем месяце.
Вот этот запрос:
PHP:
скопировать код в буфер обмена
  1.  
  2. $data=date("m"); //опредиляем месяц
  3.  
  4. $sql_reg =mysql_query ("SELECT region.name_reg, region.id_reg  FROM region ")  or die(mysql_error()); //опредиляем с какого региона сотрудник
  5.        
  6. while ($row_reg=mysql_fetch_array($sql_reg))
  7.                  
  8.  {
  9. //
  10. $sql =mysql_query ("SELECT official.fname, official.name, official.othname, official.dater,
  11. position.name_pos , day(dater) FROM official, position WHERE
  12. official.region = ".$row_reg['id_reg']."  and month(dater) =".$data."
  13. and official.position=position.id_pos and aktive=1 ORDER BY day(dater)");
  14.                                                
  15. $tot =mysql_query ("SELECT count(*)  FROM official WHERE
  16. official.region = ".$row_reg['id_reg']." and aktive=1
  17. and month(dater) =".$data."");                                         
  18. //     
  19. $total=mysql_fetch_array($tot);
  20. $count=$total['count(*)'];
  21. if ($count > 0)
  22.         {
  23.   echo "<table width=300 border=1 bordercolor=#B7D2BC cellpadding=3 cellspacing=0>
  24. <tr>
  25.  <td bgcolor=#006633 colspan=3>
  26.  <center><font color=#ffffff>".$row_reg['name_reg']."</font></center>
  27.  </td>
  28. </tr>";
  29. while ($row=mysql_fetch_assoc($sql))
  30.  
  31. {
  32.  $string= substr($row['dater'], 5);
  33.  $month= substr($string, 0, 2);
  34.  $day= substr($string, 3, 2);          
  35.                    
  36.    //Вывод на экран
  37.   echo "<tr>";
  38.   echo "<td width=156>".$row['fname']."<br>".$row['name']."<br>".$row   ['othname']."</td>";
  39.  echo "<td width=118>".$row['name_pos']."</td>";
  40.  echo "<td width=26><nobr>$day."."$month</td>";
  41.    }
  42.   echo "<br>";
  43.   }
  44.   echo "</tr></table>";
  45.                          
  46.   }
  47.  

Мне нужен запрос который бы вытаскивал тех сотрудников у кого ДР сегодня.
Никак не могу сообразить, подскажите что нужно поменять в этом запросе?
2. Stierus - 08 Апреля, 2009 - 15:18:55 - перейти к сообщению
Цитата:
$data=date("m");

замени на

а
Цитата:
and month(dater) =".$data."

замени на
CODE (text):
скопировать код в буфер обмена
  1. and DAYOFYEAR(dater) =".$data."
3. Ejik - 08 Апреля, 2009 - 15:37:40 - перейти к сообщению
Stierus пишет:
$data=date("z");

Как эта функция работает?

Stierus пишет:
and DAYOFYEAR(dater) =".$data."

А это я так понимаю берет из формата даты день, так?
4. Stierus - 08 Апреля, 2009 - 15:44:24 - перейти к сообщению
В яндекс копировать строку лень или мануал открыть ? ... такое ощущение, что издеваетесь
5. Ejik - 09 Апреля, 2009 - 06:53:32 - перейти к сообщению
Stierus пишет:
В яндекс копировать строку лень или мануал открыть ?

Совсем забыл про google Закатив глазки
Цитата:

... такое ощущение, что издеваетесь

Ни в коем случае...

Ознакомился с функциями, теперь проблемма такая, запрос работает, но сегодня 9 число, а вытаскивает за 8-ое. Это, я так понимаю, из-за того что в феврале было 28 дней. Подскажите как это можно испавить?
6. Вездеход - 09 Апреля, 2009 - 07:59:20 - перейти к сообщению
Ejik
это никак не связанно с февралем.
проверяйте код. =)
7. Ejik - 09 Апреля, 2009 - 08:15:16 - перейти к сообщению
Вездеход пишет:
Ejik
это никак не связанно с февралем.
проверяйте код. =)

Запрос работает правельно. А вот функция
дает 98, хотя сегодна 99, если не февраль тогда с чем это связано?
С другой стороны
PHP:
скопировать код в буфер обмена
  1. date("d.m.Y")
Дает текущую дату.
8. Stierus - 09 Апреля, 2009 - 08:59:45 - перейти к сообщению
Дело в том, что php возвращает число от 0 до 365, а mysql от 1 до 366 ... тоесть вам нужно просто 1 прибавить : date("z") + 1
9. Ejik - 09 Апреля, 2009 - 09:09:12 - перейти к сообщению
Stierus пишет:
Дело в том, что php возвращает число от 0 до 365, а mysql от 1 до 366 ... тоесть вам нужно просто 1 прибавить : date("z") + 1

Я так и сделал, но думал что это не правельно. Всем СПАСИБО.
10. Ejik - 09 Апреля, 2009 - 12:28:33 - перейти к сообщению
Еще один глюк выявил, в выборку не поподают люди 1984 г, т.е в запросе за месяц выходят 4 записи 1983-04-09, 1986-04-09, 1958-04-09, 1984-04-09.
А в запросе с date("z") выходят 3 записи, нет записи 1984-04-09.
Проверил несколько месяцев и везде 1984г не выходит в запросе по дням.
Опять не понятно, кто-нибудь может ткнуть носом, куда копать?

Для наглядности прекрипляю картинку.
(Добавление)
Это точно связано с высокосным годом, а как с эти бароться?
11. Stierus - 09 Апреля, 2009 - 13:46:08 - перейти к сообщению
тогда не заморачивайся, делай так :
$data=date("Y-m-d");

и в запросе
and DATE_FORMAT(`dater`, '%Y-%m-%d ') =".$data."
или
and LEFT(`dater`, 10) =".$data."
12. Ejik - 09 Апреля, 2009 - 15:36:32 - перейти к сообщению
Переделал, запрос в phpMyAdmin работает, а вот в php не могу откоректировать скрипт.
Блин никак не могу найти где касяк.
PHP:
скопировать код в буфер обмена
  1.  
  2. $data=date("m-d");
  3. $sql_reg =mysql_query ("SELECT region.name_reg, region.id_reg  FROM region ")  or die(mysql_error());
  4. while ($row_reg=mysql_fetch_array($sql_reg))
  5.  {
  6. $sql =mysql_query ("SELECT official.fname, official.name, official.othname, official.dater, position.name_pos
  7. FROM official, position
  8. WHERE official.region = ".$row_reg['id_reg']."  
  9. and DATE_FORMAT(`dater`, '%m-%d') =".$data."
  10. and official.position=position.id_pos
  11. and aktive=1");
  12.                                                
  13. $tot =mysql_query ("SELECT count(*)  FROM official
  14. WHERE official.region = ".$row_reg['id_reg']."
  15. and aktive=1
  16. and DATE_FORMAT(`dater`, '%m-%d') =".$data."");                                        
  17. //     
  18. $total=mysql_fetch_array($tot);
  19. $count=$total['count(*)'];
  20. if ($count > 0)
  21. {
  22. echo "<table width=300 border=1 bordercolor=#B7D2BC cellpadding=3 cellspacing=0>
  23. <tr>
  24. <td bgcolor=#006633 colspan=3>
  25. <center><font color=#ffffff>".$row_reg['name_reg']."</font></center>
  26. </td>
  27. </tr>";
  28. while ($row=mysql_fetch_assoc($sql))
  29. {
  30. $string= substr($row['dater'], 5);
  31. $month= substr($string, 0, 2);
  32. $day= substr($string, 3, 2);           
  33.   //Вывод на экран
  34.  echo "<tr>";
  35.  echo "<td width=156>".$row['fname']."<br>".$row['name']."<br>".$row['othname']."</td>";
  36.  echo "<td width=118>".$row['name_pos']."</td>";
  37.  echo "<td width=26><nobr>$day."."$month</td>";
  38.   }
  39.  echo "<br>";
  40.   }
  41.                  
  42.   }
  43.  
13. Stierus - 09 Апреля, 2009 - 15:47:59 - перейти к сообщению
Запрос на экран выведи и все поймёшь (если не поймёшь - подсказка, обычно значения ставят в '' )
14. Ejik - 10 Апреля, 2009 - 07:06:35 - перейти к сообщению
Stierus Вывел запрос и ничего не нашел, вы про какое значение говорите?
Весь зпрос пересмотрел вроде все правельно.
15. Stierus - 10 Апреля, 2009 - 08:23:43 - перейти к сообщению
Напиши сюда запрос, который формирует php и что выдаёт mysql_error()

 

Powered by ExBB FM 1.0 RC1