Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   SQLite - Вставить или обновить (https://javascript.ru/forum/server/35226-sqlite-vstavit-ili-obnovit.html)

Magneto 04.02.2013 14:24

SQLite - Вставить или обновить
 
Есть следующая таблица
Код:

id    site      time  count
1    mail.ru  1234  888
2    d3.ru    4567  987

База SQLite.

Как вставить знаю:
Код:

INSERT INTO TableName (site, time) VALUES ('pupkin.ru', 100)
Как обновить знаю:
Код:

UPDATE TableName count = '200', WHERE site = 'pupkin.ru'
А вот как одним запросом добавить или если сайт с таким именем уже есть, то обновить одно/несколько значений?

ksa 04.02.2013 14:35

Цитата:

Сообщение от Magneto
А вот как одним запросом

Что есть "один запрос" для SQLite?

Т.к. на лицо селект, анализ ситуации и после этого либо вставка... Либо изменение...

Magneto 04.02.2013 14:56

Типа:
Код:

UPDATE OR INSERT INTO TableName (site, count) VALUES ('mail.ru', 888) MATCHING (site)
, но такая конструкция в SQLite не работает.

ksa 04.02.2013 15:07

Цитата:

Сообщение от Magneto
UPDATE OR INSERT

Таких команд нет ни в одном SQL... :D

Magneto 04.02.2013 15:09

Цитата:

Сообщение от ksa (Сообщение 231516)
Таких команд нет ни в одном SQL... :D

Слабак ))
http://firebirdsql.su/doku.php?id=update_or_insert

ksa 04.02.2013 15:16

У нас можно сделать разве что так...

SET mysite="pupkin.ru"
&sql(
	DECLARE myCursor CURSOR FOR 
		SELECT site
		INTO :site
		FROM myTable
		WHERE site=:mysite
	FOR READ ONLY
)
&sql(OPEN myCursor)
&sql(FETCH myCursor)
IF SQLCODE {
	&sql(UPDATE SET myTable count = '200', WHERE site = :mysite)
} ELSE {
	&sql(INSERT INTO myTable (site, time) VALUES (:mysite, 100))
}
&sql(CLOSE myCursor)


:D

Magneto 04.02.2013 15:53

Спасибо ksa за помощь.
Порывшись внимательно в загашниках своих решений нашел то что нужно:
Код:

INSERT OR REPLACE INTO TableName(site, count) VALUES ('mail.ru', 999)
, или вставка/обновление для нескольких сайтов:
Код:

INSERT OR REPLACE INTO TableName(site, count) VALUES ('mail.ru', 999), ('pupkin.ru', 666)


Часовой пояс GMT +3, время: 07:54.