Php / MySQL yardım - rastgele günlük seçim?

4 Cevap php

Ben bir gün (günlük çekme) için son olur benim DB bir seçim almak için çalışıyorum. Ben aşağıdaki kodu kullanabilirsiniz:

$query = 'SELECT * FROM table ORDER BY rand() LIMIT 1

Ama bunu bana sadece tablodan rastgele bir pick verir, ve ben sayfayı yenileyin her zaman bana yeni bir rasgele seçim alır görebilirsiniz. Nasıl seçim bir bütün gün sürecek yapabilirsiniz?

Şimdiden teşekkürler <3


Ben bu çalışıyorum:

$query = "SELECT * FROM table ORDER BY rand(" . date("Ymd") . ") LIMIT 1";

Ama ben aşağıdaki hatayı alıyorum: mysql_fetch_assoc (): verilen argüman geçerli MySQL result resource değildir. Bu kırık alır parçasıdır:

$results = mysql_query($query); 

while($line = mysql_fetch_assoc($results)) 

Peki ... bu doğru, bu gibi görünmelidir? (Ben her gün rasgele seçim seçerek demek?)

$dailyPick = 'SELECT * FROM table ORDER BY rand() LIMIT 1'; 

$cacheKey = 'dailyPick'. date('dmY'); 
if($cache->has($cacheKey)) { 
    $dailyPick = $cache->get($cacheKey); 
} else { 
    // hit database 
    $dailyPick = $cache->save($cacheKey); 
} 

Ben şimdi bu çalışıyorum:

$dailyPick = 'SELECT * FROM table ORDER BY rand() LIMIT 1';  

$cacheKey = 'dailyPick'. date('dmY');  
if($cache->has($cacheKey)) {  
    $dailyPick = $cache->get($cacheKey);  
} else {  
    // hit database  
    $dailyPick = $cache->save($cacheKey);  
}  

Ancak, bana olmayan bir nesne üzerinde 'olan' işlevini kullanarak ben bir hata alır.

4 Cevap

Eğer günlük olarak değişen bir tamsayı değeri için rand için TOHUMU ayarlarsanız, bu sorunu çözecek

$query = "SELECT * FROM table ORDER BY rand(" . date("Ymd") . ") LIMIT 1";

Hile yapardı.

Bunu yapmanın bir aklı başında aracı otomatik olarak generate the pick of the day content via a cron job bu kez bir gün çalıştırmak için kurulum oldu olacaktır.

Gibi (hatta belki de sadece gelecekte arama amaçlı başka bir tabloda tıkladığınız id saklamak), cron işi sağlanan SQL çalıştırmak istiyorum ve vb, düz bir dosya / veritabanı tablosu uygun içerik depolamak.

Sen böyle bir şey deneyebilirsiniz:

$total = 'SELECT COUNT(*) FROM table;';
$query = 'SELECT * FROM table ORDER BY id ASC LIMIT 1 OFFSET ' . (date('Ymd') % $total) . ';';

Ben = 1 "bugün" alanına rastgele seçilmiş kaydı güncelleştirmek gerekir düşünüyorum ..

Böyle bir şey:

// ------------
// Run this 3 commands once a day

// Reset all records
mysql_query("UPDATE `table` SET `today` = 0");

// Pick one
$sql = mysql_query("SELECT `id` FROM `table` ORDER BY RAND() LIMIT 1");
$id = mysql_result($sql, 0, 'id');

// Update the record
mysql_query("UPDATE `table` SET `today` = 1 WHERE `id` = {$id}");

// ------------

// Now you can find again your "random found record":
$query = mysql_query("SELECT * FROM `table` WHERE `today` = 1");