[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Таблица без уникального значения
VeRTak
У меня есть связи таблиц, и в данной таблице мне не нужно уникальное значение вообще, но тогда я не могу редактировать, удалять записи. Ситуация сложилась из-за того что я импортирую скриптом xml файл, так вот там нет id, и если импортировать через REPLACE, он просто не заменяет а добавляет заново по кругу все записи. И того получается повтор записей, как быть в данной ситуации?
depp
если у тебя там нет уникальных записей - зачем же ты делаешь реплейс? просто добавляй новые.
VeRTak
Цитата (depp @ 11.08.2017 - 21:29)
если у тебя там нет уникальных записей - зачем же ты делаешь реплейс? просто добавляй новые.


А старые что предлагаешь удалять? Данный вариант мне не подходит, так как в таблице есть записи которые еще добавляются с сайта

Просто суть в чем если привязать к данной таблице id, то вот что получается к примеру я импортирую файл и к примеру заканчивается на 1000 id, затем через неделю идет новый импорт и все эти 1000 id, добавляются заново, и тем самым получаются дублирующее записи
FatCat
Значит остается одно: перед добавлением строки поиском искать эту строку, и если найдена, не добавлять.

_____________
Бесплатному сыру в дырки не заглядывают...
killer8080
Цитата (VeRTak @ 11.08.2017 - 18:03)
У меня есть связи таблиц, и в данной таблице мне не нужно уникальное значение вообще, но тогда я не могу редактировать, удалять записи.

Не находишь противоречия в своих словах?
Если эти записи нужно редактировать, значит их нужно как то идентифицировать, значит первичный ключ всё таки нужен?

Цитата (VeRTak @ 12.08.2017 - 04:53)
Просто суть в чем если привязать к данной таблице id, то вот что получается к примеру я импортирую файл и к примеру заканчивается на 1000 id, затем через неделю идет новый импорт и все эти 1000 id, добавляются заново, и тем самым получаются дублирующее записи

кто сказал что ключ должен быть обязательно авто инкрементом? Учитывая что у входных данных нет своего идентификатора, можно использовать md5 как вариант.

ALTER TABLE `table_name` ADD `id` VARCHAR(32) NOT NULL, ADD PRIMARY KEY (`id`);
UPDATE `table_name` SET `id` = MD5(CONCAT_WS('', `field_1`, `field_2`, `field_3`,`field_n`));

таким образом ты сможешь однозначно идентифицировать записи, и даже после модификации импортированных данных в таблице избежать дублирования.
Единственный нюанс, если в таблице уже есть модифицированные относительно xml данные, такие дубли нужно будет исправить в ручную.

UPD исправил CONCAT на CONCAT_WS, первая функция возвращает NULL, если хотя бы один из аргументов NULL.
VeRTak
killer8080, FatCat

Допустим. Но
Я заливаю целый xml файл. Без какого либо парсера на стороне сервера.


LOAD XML LOCAL INFILE 'File.xml'
REPLACE
INTO TABLE test
ROWS IDENTIFIED BY '<test>'


Как то так это происходит, все проходит очень быстро что мне и нужно. И проблема всего с одной таблицей, сам файл достаточно большой. Я не хочу затрагивать парсер, всего из-за одной таблицы, вот и пытаюсь найти выход в данной ситуации.
ZSH
Цитата
и в данной таблице мне не нужно уникальное значение вообще

похоже что все таки нужно
Есть же какие то поля которые никогда не меняются, как вариант создать составной уникальный индекс по нескольким полям, и получится если нет в базе такого, вставится, если есть произойдет замена
VeRTak
ZSH

Вообще таблица состоит из complexid и subwayid. complexid - неизменна, а вот subwayid меняется. Но на счет уникального ключа, дело в том что complexid может быть равен 15, и таких может быть много просто с разными subwayid. Я уже думал об этом, только я вот не понял по поводу уникальности по нескольким полям, это как?
killer8080
Цитата (VeRTak @ 12.08.2017 - 12:46)
Я не хочу затрагивать парсер,

и не нужно, повесь тригер на before insert и в нём генери хеш для ключа
VeRTak
killer8080 В точку. Тригер. Как же я забыл. Спасибо. Еще же прошлой раз когда спрашивал про заливку xml рассматривал данный вариант и совсем вылетело из головы
ZSH
Цитата
только я вот не понял по поводу уникальности по нескольким полям, это как?

создать обычный уникальный ключ только прицепить его на два поля, у тебя же как я понял complexid и subwayid если вместе их взять уникальные
killer8080
Цитата (VeRTak @ 12.08.2017 - 13:10)
не понял по поводу уникальности по нескольким полям, это как?

составной индекс же
ALTER TABLE `table_name` ADD PRIMARY KEY `key_name` (`field_1`, `field_2`);

это вариант предпочтительней, при условии что комбинации этих полей уникальны
VeRTak
Цитата (killer8080 @ 12.08.2017 - 13:21)
это вариант предпочтительней, при условии что комбинации этих полей уникальны


Да уникальны. Сейчас попробую
killer8080
Цитата (VeRTak @ 12.08.2017 - 13:22)
Да уникальны

тогда это лучший вариант, только разрули дубли если они уже есть, перед тем как создавать индекс.
VeRTak
killer8080 ZSH

Спасибо огромное доброе люди. Работает. И даже больше скажу, работает еще лучше чем я предполагал. Он не заменяет запись если изменился subwayid. А добавляет новую запись, что мне и нужно!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.