Nasıl bir rasgele (ama bir tarih için benzersiz) birincil anahtar değerini almak mı?

5 Cevap php

I ürün tablosu içinde yaklaşık 10,000 ürün var. Ben bu öğelerden birini almak ve o gün için aynı kalır bir web sayfasının bir bölümünde görüntülemek istiyorum. "Günün Ürünü" gibi bir şey.

Ben 100 Product_ID olsun bugün Örneğin, daha sonra ziyaretçilerin tüm bugün için bu ürünü öğeyi görüntülerken edilmelidir. Yarın diyelim ki, herhangi bir rasgele geçerli birincil anahtarı almak olabilir, 1289 ve ziyaretçiler yarın tüm gün 1289 ürünü olsun.

Herhangi bir fikir / öneri?

Yardımlarınız için teşekkürler.

5 Cevap

Belki veritabanındaki bir tablonun içinde günün öğenin id saklayabilirsiniz?

Nasıl hakkında bir önbellek dosyası oluşturmanız ve gece yarısı geçersiz?

Sadece günde bir kere yeni bir önbellek dosyası doldurmak DB istekleri yapabilirim - Bunun yararı sadece önbellek dosyası üzerinde damgası kontrol konum olarak sizin DB için gereksiz aramalar yapmayın değildir.

Bunun için bir CRON işi gerekmez:

if(date_of_file(potd_cache_file) != today){
  potd_cache_file = generate_from_db();
}
load_file(potd_cache_file);

Bu sadece web sitenize günün ilk ziyaretçisi yenilenmesini tetikler anlamına gelecektir, ve sonraki her ziyaretçinin bir hızlı yükleme önbellek dosyası onlara hizmet etmiş olacaktır.

Fikir oldukça basittir

  1. Bir tablo ayarlamak kadar bir ürün kimliği ve tarih alanı ile ProductOfTheDay çağrı
  2. Bir kullanıcının ziyaret tarih alanını kontrol gün sayfanın ürün üzerinde
  3. Bu bugünün tarihi ise ürün göstermek
  4. Değilse o zaman randonly yeni bir ürün almak ve o alana kaydedin.

Bir işlem Onun değil bu karmaşık.

Sen bir tohum değeri ile rasgele sayı üreteçleri başlayabilirsiniz.

Çekirdek değeri gün (21) + ay (10) + yıl (2009) olarak yapmak bu yüzden bugünün tohum 2041 olduğunu.

Sen bütün gün aynı rasgele sayı olsun ve yarın farklı bir tane olacaktır. Bu. Net nasıl çalıştığını daha fazladır. Rasgele fonksiyonu max ve min değer (bu min ve max kimliği değerleri) sonra isteğe bağlı bir çekirdek değeri alır ve bir sayı döndürür. Aynı tohum sayısı için oluşturulan aynı rasgele sayı olsun. Eğer max değiştirmek ve bu üretilen sayısını etkiler minimuma eğer mümkün. Sen nasıl php işler bakmak gerekir.

total = SELECT COUNT(id) FROM products;
day_product = SELECT id FROM products WHERE id = (UNIX_TIMESTAMP(CURRENT_DATE()) MOD total) LIMIT 1;

Ayrıca bakınız this question.