Обновить, если запись на сегодняшний день уже существует - PullRequest
3 голосов
/ 31 марта 2011

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

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

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

Если кто-то может помочь, это будетудивительно !!!

Ответы [ 3 ]

1 голос
/ 31 марта 2011

Хорошо, если вы создадите таблицу 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 / дня с заданным счетчиком или, если запись для pageID / дня уже существует, то устанавливает счетчик для предоставленного значения.

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

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

0 голосов
/ 31 марта 2011

[Редактировать - это немного сложнее, чем казалось на первый взгляд, из-за даты.]

Чтобы ОБНОВИТЬ запись, вы ДОЛЖНЫ получить счетчик, который хотите обновить, поэтому для этого необходимо сначала использовать 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']\'");}
0 голосов
/ 31 марта 2011

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

то есть №

...