Понимание Mysql на дубликате ключа - PullRequest
1 голос
/ 29 марта 2011
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario) values('$this->nombre', '$ruta', '$u') on duplicate key update urlimagen=values('$ruta')";

Я хочу избежать того, что я делаю типично

  • ВЫБРАТЬ, если существует
  • Если существует
    • Обновление
  • Else
    • Вставить

Вопросы, предложение, которое я написал, сделает это? То, как я это вижу, если я позвоню

$update = "insert into mapa_etiquetas ('casa','image.png',2) 
                      values('$this->nombre', '$ruta', '$u') 
           on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas ('casa','image2.png',2) 
                       values('$this->nombre', '$ruta', '$u') 
           on duplicate key update urlimagen=values('$ruta')";

Результатом будет два элемента в таблице с именем 'casa', верно? (вместо редактирования urlimagen. потому что он будет рассматриваться различными элементами, верно)

как я могу одним предложением mysql обновить urlimagen (для nombre, комбинации iduser) и, если его нет, вставить его?

Заранее спасибо!

Ответы [ 2 ]

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

Ваш первый запрос не соответствует вашему второму блоку кода.

Первый

$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario)
    values('$this->nombre', '$ruta', '$u') 
    on duplicate key update urlimagen=values('$ruta')";

Второй: неверный

$update = "insert into mapa_etiquetas ('casa','image.png',2) 
                  values('$this->nombre', '$ruta', '$u') 
       on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas ('casa','image2.png',2) 
                   values('$this->nombre', '$ruta', '$u') 
       on duplicate key update urlimagen=values('$ruta')";

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

Второй: исправлено

$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario) 
                  values('$this->nombre', '$ruta', '$u') 
       on duplicate key update urlimagen=values('$ruta')";
$update = "insert into mapa_etiquetas (nombre,urlimagen,id_usuario) 
                   values('$this->nombre', '$ruta', '$u') 
       on duplicate key update urlimagen=values('$ruta')";

Я также согласен с @The Scrum Meister.К их ответу следует прислушаться в отношении надлежащего использования условия «при обновлении дублированного ключа».

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

update urlimagen = values('$ruta') говорит MySql искать столбец с именем значение из $ruta. Измените свое заявление, чтобы использовать фактическое имя столбца :

insert into mapa_etiquetas (nombre, urlimagen, id_usuario)
  values ('$this->nombre', '$ruta', '$u'),
    ('$this->nombre', '$ruta2', '$u')
    /*Add more rows here*/
  on duplicate key update
    urlimagen = values(urlimagen)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...