2010-05-13 2 views
0

Я хочу показывать цитату на своем сайте на ежедневной основе. через 24 часа он должен измениться. цитаты хранятся в базе данных MySQL. как я могу сделать это с помощью PHPКак показывать цитату в течение 24 часов

Благодаря

Mathew

+0

ли они удаляются после 24 часов? или их можно использовать повторно? –

+0

да, это в отдельной таблице – mathew

+0

, которая не отвечает ни на вопрос @ Рассела: D –

ответ

0

Как о чем-то вдоль линий, используя следующие:

quotes 
------ 
quote_id 
.. 
. 

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

Затем с помощью запроса, такие как следующие, чтобы получить случайную цитату, что не один из последних 7 цитат, которые были отображается:

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 

Если сохранить результат в файл, который заполняется по CRON задания/задачи по расписанию, то вы могли бы это длится до тех пор, как вы хотите (например, 24 часа, 7 дней, 1 час, е tc)

В качестве альтернативы вы можете добавить столбец в таблицу котировок, чтобы указать, что это «текущая» цитата (например,активный), а затем использовать:

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 

Запланировать эту задачу так часто, как требуется, а затем использовать что-то вроде следующего, чтобы получить цитату:

SELECT * FROM quotes WHERE active = 1 
3

Самый простой способ будет хранить день цитата, как предполагается, будет показан на сайте в качестве столбца в таблице MYSQL, а затем сделать запрос для этой конкретной цитаты, как

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

, если вы не храните дату в базе данных, она становится все более трудным и сложным - вы должны показывать случайные записи, но следить за который был показан один когда такая же цитата не возникает дважды подряд цессии. Все выполнимо, но возможно более сложное, чем необходимо.

+0

Возможно, можно было бы использовать какой-то механизм хеширования для определения отображаемой цитаты? Просто определите способ сопоставления даты с уникальной записью кавычек. –

+0

@ Будет хорошая идея! Можно определить начальную точку (например, today = row 1) и подсчитать дни с этой точки. 30-й день будет 30-й, 31-й день 31-й и т. Д. –

0

Вам необходимо настроить вкладку cron с сервером, который работает каждые 24 часа. Однако настройка его зависит от того, какой у вас сервер. http://en.wikipedia.org/wiki/Cron для получения дополнительной информации о cron. ЕСЛИ вы используете cPanel, вам может помочь www.upstartblogger.com/how-to-create-a-cron-job-in-cpanel.

0

Много способов.

Одним из способов может быть наличие еще двух столбцов в таблице кавычек «isdisplayed» и «displaywhen».

Используя эти 2 дополнительных поля, вы можете отслеживать, какая котировка отображается и как долго она отображается.

0

Если вы не хотите использовать какое-либо решение кэша, и вы не хотите, чтобы прикрепить дату будущего использования для каждой цитаты, вы можете сделать что-то вроде:

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

если это возвращает нуль, сделать что-то вроде:

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

принести количество неиспользованных кавычек, затем выберите одну цитату случайно:

$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'] 
+0

Вопрос в том, что у меня есть две таблицы, заполненные кавычками, а другая пустая. когда я вызываю команду для отображения квот, тогда она должна вставить во вторую с текущей датой и временем. каждый раз, когда загружается страница, она должна проверять время по сравнению с сохраненным. Когда время переполняется данными во второй таблице, необходимо обновить другое с новой датой и временем. что ты думаешь?? – mathew

2

Если у вас есть набор котировок, вы можете использовать модуль для обеспечения того, чтобы разность между текущей датой и контрольной датой попадала в диапазон количества котировок в вашей таблице db.

SELECT * 
FROM `quotes` 
WHERE id = DATEDIFF(CURDATE() , '2010-05-01') MOD (SELECT COUNT(*) FROM `quotes`) 
Смежные вопросы