Обновить запись или если не существует то добавить...

Vladson

Сильнобухер
Обновить запись или если не существует то добавить...

Есть таблица, нужно либо добавить запись либо обновить, и на данный момент я делаю два запроса, пытаюсь обновить и если affected_rows == 0 то добавляю запись и всё работает, но...

Я редко работаю с базами, и встал такой вопрос, может это можно как-то сделать одним запросом ?

Желательно чтоб запрос был как можно проще (точнее универсальнее) так как должен быть одинаковым в при работе с MySQL, PostgreSQL, MS-SQL и MS-Access.
 

Vladson

Сильнобухер
Фанат
Это значит "Невозможно" или значит "Читай мануал" ?
 

.::PhoenikS::.

Новичок
Вообще насколько я знаю, MySQL вернет 0 рядов, даже если запись есть, но ты патыешь обновить её теми данными, которые там хранятся (т.е. идентичными).
Поэтому у тебя есть примерно следующие выходы
для MySQL 4.1+ - INSERT ON DUPLICATE KEY UPDATE
для Oracle - Merge
для PG не уверен, есть ли там подобные операторы, но можно попробовать переписать хранимкой или же если получится RULE (для вьюх)

Хотя повторюсь, что с ПГ я сильно неуверен - это предположение. Я с ним не работал и знаю только понаслышке
 

Vladson

Сильнобухер
INSERT ON DUPLICATE KEY UPDATE (я о нём не знал, спасибо) работает так как надо но к сожалению он пролил свет на другие проблемы в структуре моей базы, так что наверное не стоит мучаться, просто у меня не такие тяжёлые запросы чтоб любой ценой сокращать их количество, мне важнее совместимость с другими базами так что спасибо за консультацию, буду использовать 2 запроса.

Тему можно закрывать, (и даже удалять) я просто подозревал что есть что-то типа "ON DUPLICATE KEY UPDATE" но думал что это "нечто" более универсальное и наботает на большенстве видов БД, а если под каждую БД делать свой запрос то я пол года буду мануалы листать в поисках всяких "Мергах" и "Рулов"
 

Фанат

oncle terrible
Команда форума
не безнадёжен
ещё бы научиться приходить к таким выводам заранее, самостоятельно - не отнимая время у других людей - и совсем молодец получится.
 

Vladson

Сильнобухер
Фанат
Синтаксис у всех баз очень похож тот же SELECT есть во всех CУБД, так откуда бы я мог знать что ON DUPLICATE есть только в MySQL
 

Фанат

oncle terrible
Команда форума
при чём здесь синтаксис? при чём здесь есть, нету?
Работает? НИЧЕГО НЕ ТРОГАЙ.
 

Vladson

Сильнобухер
<?php
include "pages/" . stripslashes($GET['page']);
?>
Тоже работает, а вот желательно тронуть :D
 
Сверху