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 :: Getdate

 PHP.SU

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


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

> Описание: Определение даты
McLotos
Отправлено: 05 Мая, 2011 - 14:47:54
Post Id



Гость


Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2011  


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




Подскажите как реализовать. Объяснять я не очень умею, но постараюсь.
Есть таблица звонков
Спойлер (Отобразить)

и таблица пользователей
Спойлер (Отобразить)

1.Логически должно быть так, при регистрации юзер2, проверяется его номер телефона, если этот номер уже имеется то у юзер1(текущего пользователя номера) сегодняшняя дата ставится как dod. Т.е. doa юзера2 = dod юзера1
2. Теперь зачем нужна функция getdate. При помощи неё планируется сделать следующее: Когда заходит пользователь ему выводится вся информация по звонкам с его номера
Спойлер (Отобразить)

Но как сделать так, чтобы выводился не весь список звонков, а только за прошлый месяц и с учётом даты регистрации этого пользователя. Допустим я зашёл в апреле, так как апрель ещё не закончился, то звонки есть только за март. Значит мне должны отобразиться только звонки за весь март, но не раньше моей даты регистрации.
Извиняюсь если непонятно, просто голова кипит, уже даже собственные мысли понять сложно.

(Отредактировано автором: 05 Мая, 2011 - 14:49:58)



-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
Viper
Отправлено: 05 Мая, 2011 - 15:07:34
Post Id



Активный участник


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


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




McLotos имхо date_of_call и time_of_call у вас смиксованы по типам. Зачем? Проще UNIX_TIMESTAMP и при выборке делать DATE(datetime_field) и TIME(datetime_field) соответственно.
1 пункт не вижу ничего сложного.
PHP:
скопировать код в буфер обмена
  1. if ($user1['phone_number'] == $user2['phone_number']) {
  2. // выполняем запрос к БД на обновление данных
  3. }


2.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `blabla` WHERE MONTH(FROM_UNIXTIME(`datetime_field`)) = MONTH(NOW()-1)
если память не изменяет за прошлый месяц выборка.
McLotos пишет:
и с учётом даты регистрации этого пользователя
об этом позаботится mysql. логично что если юзер зарегался в апреле, то звонков за март у него в теории не должно быть Улыбка

(Отредактировано автором: 05 Мая, 2011 - 15:07:53)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
EuGen Администратор
Отправлено: 05 Мая, 2011 - 15:10:20
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Viper пишет:
CODE (SQL):
скопировать код в буфер обмена

1.
SELECT * FROM `blabla` WHERE MONTH(FROM_UNIXTIME(`datetime_field`)) = MONTH(NOW()-1)

если память не изменяет за прошлый месяц выборка.

Корректнее так:
SELECT * FROM `table` WHERE `datetime_field`>NOW()-INTERVAL 1 MONTH
А еще лучше так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $date=date('Y-m-d H:i:s');
  3. //SELECT * FROM `table` WHERE `datetime_field`>$date-INTERVAL 1 MONTH
  4.  


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
McLotos
Отправлено: 05 Мая, 2011 - 15:34:50
Post Id



Гость


Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2011  


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




Не совсем понял. Т.е. логически я понимаю что вы имеете ввиду, но я думал должно быть что-то типа
1.UPDATE `Users` SET `dod` = ( REPLACE ( dod, '0000-00-00', 'сегодняшнее число' ) ) WHERE phone_number=$_SESSION[phone_number]
Т.е. в процессе регистрации нового пользователя, dod старого пользователя заменяется с 0000-00-00 на сегодняшнее число.
Viper пишет:
логично что если юзер зарегался в апреле, то звонков за март у него в теории не должно быть

Не совсем так. Наличие звонков сканируется запросом Select * from Calls Where phone_number=$_SESSION[phone_number], здесь не учитывается дата регистрации, а просто отбираются все звонки с этого номера, а звонки могут быть ещё до появления пользователя в базе. Собственного говоря поэтому и нужен запрос заменяющий dod при регистрации нового пользователя с тем же номером. Можно было бы конечно просто удалять старого пользователя, но проблема в том что статистика всех номеров должна храниться минимум год. Следовательно, если новый пользователь заходит на страницу звонков, то он видит абсолютно все звонки, даже до дня собственной регистрации, хотя...
Select * from Calls where phone_number=$_SESSION[phone_number] and date_of_call>=$_SESSION[doa], наверное как-то так.
EuGen
или я не прав? Подскажи, плиз


-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
McLotos
Отправлено: 06 Мая, 2011 - 06:38:19
Post Id



Гость


Покинул форум
Сообщений всего: 67
Дата рег-ции: Март 2011  


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




При регистрации проводятся такие проверки
Спойлер (Отобразить)

А вот так я определяю текущую дату, вывожу её пользователю и ставлю её в поле Дата регистрации
Спойлер (Отобразить)

(Отредактировано автором: 06 Мая, 2011 - 06:39:00)



-----
ЯГотовПоверить,ЧтоБываютСлучаи,КогдаУдалениеЗубовАвтогеномЧерезЗаднийПроходЯвляетсяРациональным.
 
 Top
DarkRevenger
Отправлено: 23 Мая, 2011 - 06:25:40
Post Id



Новичок


Покинул форум
Сообщений всего: 40
Дата рег-ции: Май 2011  


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




EuGen пишет:
$date=date('Y-m-d H:i:s');
//SELECT * FROM `table` WHERE `datetime_field`>$date-INTERVAL 1 MONTH

Как я понимаю $date-INTERVAL 1 MONTH это уменьшает дату, которая в сессии на 1 месяц, а можно сделать как-то так. Сканировать таблицу, найти последний месяц, и вывести все данные за последний месяц, имеющийся в таблице?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB