Как Zend_Db можно использовать для обновления нескольких таблиц с помощью объединений? - PullRequest
3 голосов
/ 12 августа 2011

Существует ли эквивалент следующего SQL-кода, использующего модули Zend_Db?

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

Руководство mysql сообщает

... несколько таблицОператоры UPDATE могут использовать любые типы соединений, разрешенные в инструкциях SELECT, например, LEFT JOIN.

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Вы всегда можете выполнить строку запроса.

$db->query("UPDATE items,month SET items.price=month.price WHERE items.id=month.id")

Отказ от ответственности: я не проверял.

1 голос
/ 10 августа 2012

В MySQL вы можете использовать JOIN (влево, вправо или внутри) в UPDATE так же, как в выражении SELECT.

Ваш код будет выглядеть так:

$sql = <<<END
    UPDATE table1
    INNER JOIN table2 ON table1.id = table2.other_id
    SET table1.newvalue = 'value'
    WHERE table1.id = 99
        AND table2.other_value = 'value'
END;

$result = $db->query($sql);

Переменная $result будет содержать объект, связанный с вашим типом адаптера.Я использую PDO_MYSQL, поэтому я получил объект Zend_Db_Statement_Pdo.

...