Nasıl 24 saat için bir teklifi görüntülerim

6 Cevap php

Ben günlük olarak sitemde bir teklif görüntülemek istiyorum. 24 saat sonra değiştirmek gerekir. tırnak MySQL veritabanında saklanır. nasıl PHP ile bunu yapmak

Teşekkürler

Mathew

6 Cevap

Nasıl aşağıdaki kullanarak çizgisinde bir şey hakkında:

quotes
------
quote_id
..
.

quote_rota
----------
quote_rota_id
quote_id
date_shown

Daha sonra görüntülenir edilmiştir son 7 tırnak biri değil rastgele bir teklifi almak için aşağıdaki gibi bir sorgu kullanabilirsiniz:

SELECT * FROM quotes WHERE id=(
  SELECT FLOOR(MIN(quote_id)+(RAND()*MAX(quote_id)) 
  FROM quotes
) AND quote_id NOT IN (
  SELECT quote_id FROM quote_rota ORDER BY date_shown DESC LIMIT 7
) LIMIT 1;

// process and retrieve quote_id then store in quote_rota

Bir CRON iş / zamanlanmış görev tarafından doldurulan bir dosyada sonucunu saklamak, o zaman bu sürece istediğiniz gibi kalıcı olabilir (örneğin 24 saat, 7 gün, 1 saat, vb)

Alternatif olarak, bu "geçerli" alıntı (örn. aktif) ve daha sonra kullanmak olduğunu belirtmek için alıntı tabloya bir sütun eklemek olabilir:

SELECT quote_id FROM quotes WHERE id=(
  SELECT FLOOR(MIN(quote_id)+(RAND()*MAX(quote_id)) 
  FROM quotes
) AND quote_id NOT IN (
  SELECT quote_id FROM quote_rota ORDER BY date_shown DESC LIMIT 7
) LIMIT 1;

// process and retrieve quote_id then update "current" flag

Gereken sıklıkta bu görevi planlamak ve daha sonra teklifi almak için aşağıdaki gibi bir şey kullanabilirsiniz:

SELECT * FROM quotes WHERE active = 1

Kolay yolu bir alıntı mySQL tablodaki bir sütun olarak sitede gösterilen olması gerekiyordu gün depolamak ve sonra gibi belirli teklif için bir sorgu yapmak olacaktır

$query = "SELECT * FROM quotes WHERE date = CURDATE();";

Eğer veritabanında tarihini saklamak yoksa, daha zor ve karmaşık hale gelir - rastgele girişlerini görüntülemek ancak bunu aynı alıntı kısa arkaya iki kez gelip vermediğinde biri gördü hangi takip etmek olurdu. Tüm yapılabilir, ama belki daha karmaşık gereğinden fazla.

Eğer tırnak bir dizi varsa, geçerli tarihi ve referans tarih arasındaki fark, db tablosunda tırnak sayısı aralığına düşecek sağlamak için modülü kullanabilirsiniz.

SELECT *
FROM `quotes`
WHERE id = DATEDIFF( CURDATE( ) , '2010-05-01' ) MOD (SELECT COUNT(*) FROM `quotes`)

Eğer kurulum için her 24 saat çalışan sunucu ile bir cron sekmeyi gerekir. Ancak, onu kurma var ne sunucu bağlıdır. http://en.wikipedia.org/wiki/Cron cron'nun hakkında daha fazla bilgi için. Eğer cPanel kullanarak konum IF, www.upstartblogger.com / how-to-create-a-cron işi-in-cpanel size yardımcı olabilir.

Birçok yönden.

Bir yolu tırnak tabloda 2 sütun daha var 'isdisplayed' ve 'displayedwhen' olabilir.

Bu 2 ekstra alanları kullanarak alıntı görüntülendiği takip ve bunun için gösterilmiştir nasıl uzun olabilir.

Eğer herhangi bir önbellek çözümü kullanmak ve her teklif için gelecekteki kullanım tarihini eklemek istemiyorum istemiyorsanız, gibi bir şey yapabilirsiniz:

SELECT id, quote FROM quotes WHERE date_used = NOW();

Bu boş dönerse, gibi bir şey yapın:

$count = SELECT COUNT(*) FROM quotes WHERE date_used = '0000-00-00' 

Kullanılmayan tırnak sayıda almak, daha sonra rastgele bir alıntı seçin:

$rand = rand (0, $count);
$quote = SELECT id, quote FROM quotes WHERE date_used = '0000-00-00' LIMIT $rand, 1
UPDATE quotes SET date_used = NOW() WHERE id = $quote['id']