• Модуль: 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;
}