MySQL tarih / zaman hesaplama

4 Cevap php

I a date ve start_date ve start_time adı MySQL tabloda time sütun sırası. Benim kullanıcılar kendileri için hatırlatıcı ayarlamak için yeteneği start_time, dk önce X saat gönderilmesini istiyorum. 1 saat ve maksimum 24 saat.

Ben bu hatırlatmaları göndermek için bir CRON komut dosyası çalıştıran olacak. Sağ şimdi yapın:

SELECT * FROM auctions WHERE start_date=CURDATE() AND status='0'

Bugün başlangıç ​​olacak ve henüz başlamamış tüm ihaleleri almak için. Benim sorum zamanı şimdi X saat start_time öncedir yüzden eğer ben onlara bir hatırlatma göndermek olmadığını nasıl anlayabilirsiniz, olduğunu.

Tüm herhangi bir öneriniz?

4 Cevap

Böyle bir şey:

SELECT col1, col2, col3 
FROM records 
WHERE (records.startDate BETWEEN NOW() AND ADDDATE(NOW(), INTERVAL 9 HOUR)) 
AND (records.status = '0');

Sadece yerine tarih boyunca bir ve zaman için tek bir basit damgası alanı kullanamazsınız bir sebebi mi var. Eğer yaparak, önümüzdeki 5 saat (diyelim) başlayacak tüm olanları bulabiliriz Bu şekilde

   select * from auctions where start_ts between now() and now() + interval '5 hours';

Not: aralığı sözdizimi biraz veritabanları arasında değişir ve bu PostgreSQL için biri, yani mysql için biraz değiştirmek zorunda kalabilirsiniz.

Tüm cevaplar gönderdi ve kendi çalışma öncesi ben aslında bu şekilde yaptım. Ben bir süre üzerinde çünkü ben geri dönmek ve bunu değiştiremezsiniz :)

			$sql="SELECT HOUR(ADDTIME(CURTIME(),'$hour')) as remindHour,
					HOUR(CURTIME()) as curHour";
			$result=$this->db->query($sql);
			extract($result->getAllSingle());

			if ($remindHour <=$curHour)
			{
				//Send reminders			
			}

Eğer zaman kazanmak için unixtime kullanabilir miyim?

PHP adında harika bir işlevi vardır bu yana strtotime.

In içinde size söyleyebilirim. strtotime ("20 saat") ve şimdi 20 saat boyunca unixtime olsun.

Sonra onun meselesi hangi alan ve eğer öyleyse, bildirim göndermek, diğer daha büyük.