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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос к бд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Ejik
Отправлено: 08 Апреля, 2009 - 15:08:56
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Всем здравствуйте, помогите построить запрос, есть запрос к базе он вытаскивает всех сотрудников у кого день рождения в текущем месяце.
Вот этот запрос:
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.  

Мне нужен запрос который бы вытаскивал тех сотрудников у кого ДР сегодня.
Никак не могу сообразить, подскажите что нужно поменять в этом запросе?
 
 Top
Stierus Супермодератор
Отправлено: 08 Апреля, 2009 - 15:18:55
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
$data=date("m");

замени на

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

замени на
CODE (text):
скопировать код в буфер обмена
  1. and DAYOFYEAR(dater) =".$data."

(Отредактировано автором: 08 Апреля, 2009 - 15:19:14)

 
My status
 Top
Ejik
Отправлено: 08 Апреля, 2009 - 15:37:40
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Stierus пишет:
$data=date("z");

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

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

А это я так понимаю берет из формата даты день, так?
 
 Top
Stierus Супермодератор
Отправлено: 08 Апреля, 2009 - 15:44:24
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




В яндекс копировать строку лень или мануал открыть ? ... такое ощущение, что издеваетесь
 
My status
 Top
Ejik
Отправлено: 09 Апреля, 2009 - 06:53:32
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Stierus пишет:
В яндекс копировать строку лень или мануал открыть ?

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

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

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

Ознакомился с функциями, теперь проблемма такая, запрос работает, но сегодня 9 число, а вытаскивает за 8-ое. Это, я так понимаю, из-за того что в феврале было 28 дней. Подскажите как это можно испавить?
 
 Top
Вездеход
Отправлено: 09 Апреля, 2009 - 07:59:20
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




Ejik
это никак не связанно с февралем.
проверяйте код. =)


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
Ejik
Отправлено: 09 Апреля, 2009 - 08:15:16
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Вездеход пишет:
Ejik
это никак не связанно с февралем.
проверяйте код. =)

Запрос работает правельно. А вот функция
дает 98, хотя сегодна 99, если не февраль тогда с чем это связано?
С другой стороны Дает текущую дату.

(Отредактировано автором: 09 Апреля, 2009 - 08:23:51)

 
 Top
Stierus Супермодератор
Отправлено: 09 Апреля, 2009 - 08:59:45
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Дело в том, что php возвращает число от 0 до 365, а mysql от 1 до 366 ... тоесть вам нужно просто 1 прибавить : date("z") + 1

(Отредактировано автором: 09 Апреля, 2009 - 09:00:08)

 
My status
 Top
Ejik
Отправлено: 09 Апреля, 2009 - 09:09:12
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Stierus пишет:
Дело в том, что php возвращает число от 0 до 365, а mysql от 1 до 366 ... тоесть вам нужно просто 1 прибавить : date("z") + 1

Я так и сделал, но думал что это не правельно. Всем СПАСИБО.

(Отредактировано автором: 09 Апреля, 2009 - 09:09:32)

 
 Top
Ejik
Отправлено: 09 Апреля, 2009 - 12:28:33
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Еще один глюк выявил, в выборку не поподают люди 1984 г, т.е в запросе за месяц выходят 4 записи 1983-04-09, 1986-04-09, 1958-04-09, 1984-04-09.
А в запросе с date("z") выходят 3 записи, нет записи 1984-04-09.
Проверил несколько месяцев и везде 1984г не выходит в запросе по дням.
Опять не понятно, кто-нибудь может ткнуть носом, куда копать?

Для наглядности прекрипляю картинку.
(Добавление)
Это точно связано с высокосным годом, а как с эти бароться?
Прикреплено изображение (Нажмите для увеличения)
1.jpg

(Отредактировано автором: 09 Апреля, 2009 - 13:05:53)

 
 Top
Stierus Супермодератор
Отправлено: 09 Апреля, 2009 - 13:46:08
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




тогда не заморачивайся, делай так :
$data=date("Y-m-d");

и в запросе
and DATE_FORMAT(`dater`, '%Y-%m-%d ') =".$data."
или
and LEFT(`dater`, 10) =".$data."

(Отредактировано автором: 09 Апреля, 2009 - 13:46:25)

 
My status
 Top
Ejik
Отправлено: 09 Апреля, 2009 - 15:36:32
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Переделал, запрос в 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.  

(Отредактировано автором: 09 Апреля, 2009 - 15:37:37)

 
 Top
Stierus Супермодератор
Отправлено: 09 Апреля, 2009 - 15:47:59
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Запрос на экран выведи и все поймёшь (если не поймёшь - подсказка, обычно значения ставят в '' )
 
My status
 Top
Ejik
Отправлено: 10 Апреля, 2009 - 07:06:35
Post Id


Гость


Покинул форум
Сообщений всего: 110
Дата рег-ции: Окт. 2007  


Помог: 0 раз(а)




Stierus Вывел запрос и ничего не нашел, вы про какое значение говорите?
Весь зпрос пересмотрел вроде все правельно.
 
 Top
Stierus Супермодератор
Отправлено: 10 Апреля, 2009 - 08:23:43
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Напиши сюда запрос, который формирует php и что выдаёт mysql_error()
 
My status
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB