Мускуль совет нужен.

12
X
На сайте с 21.08.2005
Offline
67
#11

массив данных в виде: tb1(id2, id3, value), tb2(id2, id3, value) кладём во временные таблицы ttb1 и ttb2, делаем им собственные id автоинкрементом.

INSERT INTO tb1 (id2, id3, value)

SELECT ttb1.id2, ttb1.id3, ttb1.value FROM ttb1

WHERE ttb1.id not in

(

SELECT ttb1.id

FROM ttb1 inner join tb1 on (tb1.id2 = ttb1.id2) and (tb1.id3 = ttb1.id3)

)

Для UPDATE принцип тот же только условие меняется на

WHERE ttb1.id in (SELECT ...)

Создание, продвижение сайтов. Контекстная реклама. Разработка ПО. www.seop.ru (www.seop.ru)
N
На сайте с 06.05.2007
Offline
419
#12
malls:
соответственно надо некоторые поля добавить ( add), а некоторые изменить. Сочетание id2+id3 ВСЕГДА УНИКАЛЬНО! Но ключа id нету на момент добавления!

не особо понятно, но , может вы не в курсе, что первичный ключ можно делать составным?

все упростится.

Кнопка вызова админа ()
malls
На сайте с 08.08.2005
Offline
255
#13
СКОРПИОН:
Не понимаю. id2+id3 - уникален. Следовательно, при использовании REPLACE:
1. (Петя , характер , исправился) - запись будет замещена;
2. (Миша , лицо, удивленное) - запись будет создана.

Да нет же - ему нужен именно первичный ключ, иначе он просто добавляет, хотя может вот тут собака порыта:

netwind:
не особо понятно, но , может вы не в курсе, что первичный ключ можно делать составным?
все упростится.

нет не в курсе... велкам рассказать! :)

N
На сайте с 06.05.2007
Offline
419
#14

malls, да что тут рассказывать. просто вместо искусственного ключа с autoincrement, вы можете объявить логичный первичный ключ :

create table (

id2

..

PRIMARY KEY (id2,id3)

);

и можете быть уверены, что комбинации id2 и id3 полностью точно идентифицируют запись.

malls
На сайте с 08.08.2005
Offline
255
#15
netwind:
malls, да что тут рассказывать. просто вместо искусственного ключа с autoincrement, вы можете объявить логичный первичный ключ :
create table (
id2
..
PRIMARY KEY (id2,id3)
);
и можете быть уверены, что комбинации id2 и id3 полностью точно идентифицируют запись.

остается вопрос - как потом обращаться по первичному ключу к записи? Т.е. первичный ключ данной таблицы, исполльзуется для идентификации записей в других таблицах - как с этим работать? Причем предположим такой вариант:

	id2 VARCHAR(100) NOT NULL,

id3 INT(10) NOT NULL,
value TINYTEXT NOT NULL,
PRIMARY KEY id (id2,id3),
UNIQUE KEY id (id)

как поле в другой таблице определить под хранение этого ключа?

N
На сайте с 06.05.2007
Offline
419
#16

malls, да как и всегда, только указывать или соединять сразу по обоим значениям полей.

и еще, не очень хорошая идея делать primary key из varchar. я то думал у вас там ссылка на некий словарь свойств и оба поля целочисленные.

malls
На сайте с 08.08.2005
Offline
255
#17
netwind:
malls, да как и всегда, только указывать или соединять сразу по обоим значениям полей.

да уже вроде разобрался :) осталось базы перекроить немного и блин скрипты... :)

netwind:
и еще, не очень хорошая идея делать primary key из varchar. я то думал у вас там ссылка на некий словарь свойств и оба поля целочисленные.

это я пример привел, в реальности там за ним записи из другой таблицы, т.е. тот самый "словарь", так что конечно оба будут числовыми.

netwind, СКОРПИОН - биг сеньк обоим!

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий