2011-03-31 2 views
3

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

mysql_query("INSERT INTO daily_record (PageID, count) 
      VALUES (".$array['page_id'].",".$array['count'].")"); 

Столбец Я хочу, чтобы проверить это CURRENT_TIMESTAMP поля (record_date - часть daily_record таблицы), если сегодняшняя дата существует для PageId, то обновление должно произойти, а не новая вставки.

Если кто-то может помочь, это будет потрясающе !!!

+0

Является ли 'record_date' в той же таблице (' daily_record')? Вы действительно имеете в виду, если существует дата, или вы имеете в виду, если дата сегодня? (Я бы предположил, что он существует на вчера в любом случае, если вы не очистите таблицу) – Rudu

+0

Да, record_date находится в daily_record. Если дата сегодня, обновите ее. Мне все равно нужно сохранить исторический рекорд предыдущих дней ... Хорошая точка ... :) –

ответ

1

Ну, если вы строите daily_record таблицу, как это:

CREATE TABLE daily_record (
    pageID INT, 
    record_date DATE, 
    count INT, 
    PRIMARY KEY (pageID,record_date), 
     INDEX idxPageID (pageID) 
) 

Затем можно использовать команду:

INSERT INTO daily_record (
    pageID,record_date,`count` 
) VALUES (
    1,'2011-03-31',32 
) ON DUPLICATE KEY UPDATE `count`=32; 

Очевидно PageId/record_date/count будет предоставлен вызывающим кодом. Это эффективно создает запись для идентификатора страницы/дня с заданным подсчетом или если запись для идентификатора pageID/day уже существует, то она устанавливает счетчик в указанное значение.

Использование типа столбца DATE предотвращает получение бесплатной метки времени, но это не особенно полезно для этой таблицы - то, как вы ее описываете, поскольку вам не нужны часы/минуты/секунды.

Ключ здесь - уникальный индекс, созданный линией PRIMARY KEY.... Если это уникальность будет нарушена вставкой, тогда вместо нее может произойти обновление.

+0

Очень умный! что бы это сделать. –

+0

BTW Я через 'INDEX idxPageID (pageID)' в предположении, что вы можете захотеть получить записи для определенной страницы, если количество строк намного больше, чем количество страниц (например, 1000 строк данных, на 10 страниц) этот индекс не собирается делать приседания (полноэкранное сканирование в любом случае), поэтому, во что бы то ни стало, его отбросить - это не требуется для решения. – Rudu

0

Лучшее, что я могу придумать либо использовать select с if ... then для проверки существования раньше времени, или запустить update о первом, проверьте @@rowcount (записей пострадавших) и сделать insert, если он возвращается с 0)

т.е. No.

0

[Edit - это немного более сложным, чем это казалось на первый, из-за DATE вещь.]

для обновления записи вы должны получить счетчик, который вы хотите обновить , так что вам нужно сначала использовать SELECT. Но вам нужно выбрать записи, которые относятся только к текущей дате.

Предположим, что вы сделали код, чтобы получить текущую дату в $ сегодня.

Тогда как сказал Кендрик,

 
$result=mysql_query("SELECT * from daily_record where PageID=\'$array['page_id']\' and date_field BETWEEN '$today'.' 00:00:00' AND '$today'.' 23:59:59'"); 

if (!$result) 
    { mysql_query("INSERT into daliy_record (PageID,count} VALUES (\'$array['page_id']\',\'$array['count']\')"); } 
else 
    {mysql_query("UPDATE daily_record (count) VALUES (\'$array['count']\') where PageID=\'$array['page_id']\' and date_field=\'$result['date_field']\'");} 

 Смежные вопросы

  • Нет связанных вопросов^_^