Обновите запись, если она существует, иначе вставьте в MySQL

Я знаю, что этот вопрос задавался много раз, и на него тоже был дан ответ..
Но моя проблема более специфична, и я не смог найти подходящего решения.

Моя таблица (названная страницами) такая же;

id (int)
title (text)
content (text)
slug (text)

Мне нужно обновить свою запись, если слаг (я преобразовал его в уникальный) совпадает с опубликованным.

Я имею в виду, что мне нужно обновить/вставить свою запись на основе на основе записи slug.

Например. текущие данные:

  id  |  title  |  content  |  slug  |
--------------------------------------
  1  |  MainPage| some html | mainpage

если опубликованные данные имеют title=ChildPage, content=html.., slug=mainpage, то мне нужно обновить предыдущую запись (записи заголовка и контента), но если данные имеют title=MainPage, content=html.., slug=other_slug, мне нужно вставить эти данные как новые с новым идентификатором.

ОБНОВЛЕНИЕ

Запись Slug была преобразована в ключ UNIQUE.


person Alper    schedule 09.07.2012    source источник
comment
Вы сказали, что столбец не ограничен UNIQUE... почему бы и нет? Я имею в виду, вы готовы? В MySQL есть удобный механизм, если он может быть UNIQUE   -  person Chris Trahey    schedule 10.07.2012
comment
обновить предыдущую запись на основе чего?   -  person Fahim Parkar    schedule 10.07.2012
comment
Если слаг не уникален, что вы собираетесь делать, если при обновлении будет несколько экземпляров слага?   -  person Braiba    schedule 10.07.2012
comment
Это действительно просто сделать, если у вас есть УНИКАЛЬНЫЙ или ПЕРВИЧНЫЙ индекс   -  person Kerry Jones    schedule 10.07.2012
comment
Я действительно новичок в MySQL, и я предположил (читал в некоторых местах), что текстовое поле не может быть уникальным/автоувеличивающимся, возможно (вероятно), я ошибаюсь.   -  person Alper    schedule 10.07.2012
comment
Я добавил свойство UNIQUE в краткую запись и обновил вопрос.   -  person Alper    schedule 10.07.2012


Ответы (1)


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

ALTER TABLE pages ADD UNIQUE KEY slug;

Причина проста: если это не уникальное ограничение, может быть более одного слага с «главной страницей»... какой из них следует обновить??

затем используйте предложение ON DUPLICATE KEY UPDATE:

INSERT INTO pages 
VALUES (NULL, $title, $content, $slug) ON DUPLICATE KEY UPDATE content=$content
person Chris Trahey    schedule 09.07.2012
comment
после преобразования слаговой записи в уникальный ключ она работает, как я и ожидал. Спасибо за помощь и всем остальным. - person Alper; 10.07.2012
comment
ALTER TABLE pages ADD UNIQUE KEY slug; вызвало у меня ошибки с MySQL. Я уже создал индекс для этого столбца - не уверен, что это имеет значение. У меня сработало следующее: ALTER TABLE pages ADD UNIQUE (slug); - person user12345; 12.06.2014