- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/db/mysqlisqlhelper.php
- Класс: BitrixMainDBMysqliSqlHelper
- Вызов: MysqliSqlHelper::prepareMergeSelect
public function prepareMergeSelect($tableName, array $primaryFields, array $selectFields, $select, $updateFields)
{
$update = [];
$tableFields = $this->connection->getTableFields($tableName);
// one registry
$tableFields = array_change_key_case($tableFields, CASE_UPPER);
$updateFields = array_change_key_case($updateFields, CASE_UPPER);
foreach ($updateFields as $columnName => $value)
{
if (isset($tableFields[$columnName]))
{
$update[] = $this->quote($columnName) . ' = '. $this->convertToDb($value, $tableFields[$columnName]);
}
else
{
trigger_error("Column `{$columnName}` is not found in the `{$tableName}` table", E_USER_WARNING);
}
}
$sql = 'INSERT INTO ' . $this->quote($tableName) . ' (' . implode(',', array_map([$this, 'quote'], $selectFields)) . ') ';
$sql .= $select;
$sql .= ' ON DUPLICATE KEY UPDATE ' . implode(',', $update);
return $sql;
}