всем привет! сидел, тут, писал (кодил значит ).... и в один прекрасный момент понадобилось мне написать запрос к БД такого типа Код (sql): INSERT ar_vm_attendance (product_id, attendance) VALUES (15, 1) ON DUPLICATE KEY UPDATE attendance = attendance+1, date_time_last_view = NOW(); при этом использовать стандартную структуру класса JDatabaseQuery ни как не получается там в принципе нет возможности добавить ON DUPLICATE KEY UPDATE покурив... (не только сигареты...) пришёл к выводу что проще будет до пилить данный класс, вот что получилось Код (PHP): /** * Query Extended Building Class. * * @subpackage Database * @since woojin 17.10.2015 */ class JDatabaseQueryExt extends JDatabaseQuery { /** * @var JDatabaseQueryExtElement The duplicate element. * @since woojin 17.10.2015 */ protected $duplicate = null; /** * Add a single condition, or an array of conditions to the ON DUPLICATE KEY UPDATE clause of the query. * * Usage: * $query->duplicate('a = 1')->duplicate('b = 2'); * $query->duplicate(array('a = a + 1', 'b = b * a')); * * @param mixed $conditions A string or array of where conditions. * * @return JDatabaseQueryExt Returns this object to allow chaining. * * @since by woojin 17.10.2015 */ public function duplicate($conditions) { if (is_null($this->duplicate)) { $this->duplicate = new JDatabaseQueryElement('ON DUPLICATE KEY UPDATE', $conditions); } else { $this->duplicate->append($conditions); } return $this; } public function __toString() { $query = ''; switch ($this->type) { case 'element': $query .= (string) $this->element; break; case 'select': $query .= (string) $this->select; $query .= (string) $this->from; if ($this->join) { // special case for joins foreach ($this->join as $join) { $query .= (string) $join; } } if ($this->where) { $query .= (string) $this->where; } if ($this->group) { $query .= (string) $this->group; } if ($this->having) { $query .= (string) $this->having; } if ($this->order) { $query .= (string) $this->order; } break; case 'union': $query .= (string) $this->union; break; case 'delete': $query .= (string) $this->delete; $query .= (string) $this->from; if ($this->join) { // special case for joins foreach ($this->join as $join) { $query .= (string) $join; } } if ($this->where) { $query .= (string) $this->where; } break; case 'update': $query .= (string) $this->update; if ($this->join) { // special case for joins foreach ($this->join as $join) { $query .= (string) $join; } } $query .= (string) $this->set; if ($this->where) { $query .= (string) $this->where; } break; case 'insert': $query .= (string) $this->insert; // Set method if ($this->set) { $query .= (string) $this->set; } // Columns-Values method elseif ($this->values) { if ($this->columns) { $query .= (string) $this->columns; } $query .= ' VALUES '; $query .= (string) $this->values; } /*++++ start inserting by woojin ++++*/ if ($this->duplicate) { $query .= (string) $this->duplicate; } /*---- stop inserting by woojin ----*/ break; } return $query; } } использование: Код (PHP): $db = JFactory::getDBO(); $query = new JDatabaseQueryExt($db); $query->insert('#__virtuemart_attendance'); $query->columns('product_id, attendance'); $query->values("$product_id, 1"); $query->duplicate(array('attendance = attendance+1', 'date_time_last_view = NOW()')); $db->setQuery($query); $db->query(); вставить можно в любое место где потребуется данная конструкция "вроде всё просто" к/ф Жмурки за сим разрешите откланяться