За последние 24 часа нас посетили 10353 программиста и 949 роботов. Сейчас ищут 308 программистов ...

Случайная запись каждый день

Тема в разделе "PHP для новичков", создана пользователем lysosutrin, 26 май 2012.

  1. lysosutrin

    lysosutrin Активный пользователь

    С нами с:
    7 май 2012
    Сообщения:
    15
    Симпатии:
    0
    Мне необходимо, чтобы каждый день выводилась случайная запись из mysql, но раньше, чем наступит следующий день, нельзя узнать о следующей записи из mysql. Я думал сделать ячейку в таблице mysql, где хранить дату последнего дня, а потом сравнивать, и если нынешняя дата больше записанной, выводит другую запись и заменяем дату. Но мне показалось это решение некрасивым, как можно сделать его лучше?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.725
    Симпатии:
    1.139
    Адрес:
    там-сям
    почитайте про rand seed. функции псевдослучайных чисел можно инициировать так, чтобы они выдавали всякий раз одну и ту же последовательность. в вашем случае сидом может быть текущая дата.
     
  3. lysosutrin

    lysosutrin Активный пользователь

    С нами с:
    7 май 2012
    Сообщения:
    15
    Симпатии:
    0
    На русском материала маловато, да и красивое ли это решение?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.725
    Симпатии:
    1.139
    Адрес:
    там-сям
    это о*тельно красивое решение. гениально просто и работает
     
  5. lysosutrin

    lysosutrin Активный пользователь

    С нами с:
    7 май 2012
    Сообщения:
    15
    Симпатии:
    0
    В таком случае помогите найти информацию о rand(seed) или как правильнее написать? Я не знаю английского и не знаю, как пользоваться этим.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.725
    Симпатии:
    1.139
    Адрес:
    там-сям
  7. lysosutrin

    lysosutrin Активный пользователь

    С нами с:
    7 май 2012
    Сообщения:
    15
    Симпатии:
    0
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.725
    Симпатии:
    1.139
    Адрес:
    там-сям
    вот вам готовое решение. за очепятнки не ручаюсь, отлаживайте
    Код (PHP):
    1. define('SECONDS_IN_A_DAY', (60*60*24));
    2. $today = intval(time() / SECONDS_IN_A_DAY) * SECONDS_IN_A_DAY; // это всего лишь дата "сегодня" в UNIX TIMESTAMP
    3. srand($today); // каждый день новая последовательность
    4. $result = mysql_query("SELECT max(id) FROM mytable"); 
    5. $max = mysql_result($result); // в каком диапазоне нужно случайное значение
    6.  
    7. $id = rand(1, $max);
    8. $result = mysql_query("SELECT * FROM mytable where id >= {$id} LIMIT 1"); // трюк с >= и limit позволит нам не думать о "дырках" в нумерации
    9. $row = mysql_fetch_assoc($result);  // BINGO!
    10.  
     
  9. lysosutrin

    lysosutrin Активный пользователь

    С нами с:
    7 май 2012
    Сообщения:
    15
    Симпатии:
    0
    Огромнейшее спасибо!
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.725
    Симпатии:
    1.139
    Адрес:
    там-сям
    очепятка в mysql_result есть :D я думаю справитесь.

    что можно улучшить: очевидно если в течении дня эта процедура выдает одно и то же значение $row, то его можно и нужно кешировать. но это уже другая история…
     
  11. lysosutrin

    lysosutrin Активный пользователь

    С нами с:
    7 май 2012
    Сообщения:
    15
    Симпатии:
    0
    Да, все ошибки исправил, все работает, а насчет кеширования, думаю, сам пойму)