PHP и MYSQL Является ли этот синтаксис MySQL правильным для ОБНОВЛЕНИЯ / ВСТАВКИ, ЕСЛИ СУЩЕСТВУЕТ - PullRequest
0 голосов
/ 10 февраля 2011

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

    $link = resdb::connect();
    $q = "IF ( EXISTS ( SELECT * FROM property AS this WHERE this.name = $propertyname ) )"
         ."begin"
            // UPDATE PROPERTY IF IT EXISTS
            ."UPDATE property (name, propertylocation, propertyrating, propertytype)" 
            ."SET ($propertyname, $locationid, $ratingid, $typeid)"          
            ."WHERE name = $propertyname"
         ."end"
         ."ELSE"
         ."begin"
            ."INSERT INTO property (name, propertylocation, propertyrating, propertytype)" 
            ."VALUES ($propertyname, $locationid, $ratingid, $typeid)"
         ."end";
    $r = mysqli_query($link, $q);
    if($r > 0){
        return true;
    }

По завершении каждой строки создается уникальный идентификатор.

1 Ответ

2 голосов
/ 10 февраля 2011

Сначала создайте уникальный индекс для столбца имени:

ALTER TABLE property ADD UNIQUE KEY(name)

Теперь вы можете использовать MySql INSERT ... ON DUPLICATE KEY UPDATE...

INSERT property (name, propertylocation, propertyrating, propertytype)
VALUES ($propertyname, $locationid, $ratingid, $typeid)
ON DUPLICATE KEY UPDATE 
    propertylocation = VALUES(propertylocation),
    propertyrating = VALUES(propertyrating),
    propertytype = VALUES(propertytype)

Документы: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Не забудьте очистить входные данные базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...