Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вставка уникального значения / 7 сообщений из 7, страница 1 из 1
03.11.2015, 14:56:37
    #39093814
fenix_63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
Всем привет. Народ, помогите пожалуйста. У меня есть таблица:

id | content | gr | flag
----------------------
43 644 2 1
44 646 2 0
45 242 2 0
46 6464 2 0


47 7575 3 1
48 24242 3 0
49 8996 3 0
50 3469 3 0

id - первичный ключ (автоинкрементный). Мне нужно добавить новое значение в таблицу, интересует поле content. Вновь добавляемое значение должно быть уникальным относительно записей, у которых flag=1. например в данном примере у вновь добавляемой записи не должно быть content=644 или content=7575.

Я пишу запрос, используя FIND_IN_SET, но phpMyAdmin почему то ругается. Вот мой запрос:

Код: sql
1.
2.
IF FIND_IN_SET('644',Select content From add_delete_record Where flag=1)=0 THEN
	INSERT INTO (content, gr, flag) VALUES ('644','4','1');



Но новая запись в таблицу не добавляется.
вот ошибка:
автор#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'IF FIND_IN_SET('644',Select content From add_delete_record Where flag=1)=0 THEN ' at line 1

подскажите пожалуйста, что не так? Где я накосячил?
...
Рейтинг: 0 / 0
03.11.2015, 16:46:06
    #39093948
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
fenix_63Вот мой запрос:

Код: sql
1.
2.
IF FIND_IN_SET('644',Select content From add_delete_record Where flag=1)=0 THEN
	INSERT INTO (content, gr, flag) VALUES ('644','4','1');

Это не запрос.
...
Рейтинг: 0 / 0
03.11.2015, 21:01:27
    #39094082
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
fenix_63, тут три стратегии, в зависимости от вашей ситуации.

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

Код: sql
1.
alter table t add unique key _content(content);



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

Код: sql
1.
2.
insert into t values (644, 4, 1) 
    on duplicate key update content = 4;



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

Код: sql
1.
2.
3.
4.
insert into t 
    select max(content), 1  
        from t 
        where flag = 1;
...
Рейтинг: 0 / 0
03.11.2015, 23:31:15
    #39094167
fenix_63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
Спасибо. Стратегию 1 я пробовал. Но индексное поле id менять пока не хочу. Дело в том, что у меня на веб-странице есть кнопка для удаления записи - и там идёт привязка к id, и если id будет не уникальным, может удалиться несколько записей таблицы.


Задачу ещё усложняет то, что записи,у которых flag = 0 могут дублироваться. Вообще у меня добавление будет сделано вот как: добавляю content: смотрю сначала в какую группу можно записать, т.е. с каким gr. gr - для обозначения группы. По 4 записи в группу. Если в группе 0 записей, вот тогда надо и сделать запись уникальной, т.к. у неё flag будет равен 1, если в группе уже 1,2 или 3 записи есть, то просто добавляю ещё одну запись в таблицу, уже не заботясь об уникальности.



Стратегию 2 не могу применить, т.к. это не нужно. Мне нужно просто добавить уникальное значение. Т.е. сперва проверить, есть ли среди тех записей, у которых flag=1 совпадение с вновь добавляемым значением (content). Если совпадение есть - то ничего не добавляем, и вообще ничего не делаем, а вот если совпадений нет, то успешно добавляем в базу.

Ну если не получиться на MySQL это сделать, придётся ещё и php прикрутить в помощь ))
...
Рейтинг: 0 / 0
03.11.2015, 23:58:28
    #39094177
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
fenix_63Но индексное поле id менять пока не хочу. Дело в том, что у меня на веб-странице есть кнопка для удаления записи - и там идёт привязка к id, и если id будет не уникальным, может удалиться несколько записей таблицы.Вообще-то уникальных индексов у таблицы может быть несколько.
...
Рейтинг: 0 / 0
04.11.2015, 00:31:21
    #39094186
fenix_63
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
Я имел ввиду ключевое поле. Не профи в базах данных. Помогите пожалуйста с этой задачей.
...
Рейтинг: 0 / 0
04.11.2015, 01:53:21
    #39094208
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка уникального значения
fenix_63Спасибо. Стратегию 1 я пробовал. Но индексное поле id менять пока не хочу.
КМБ по ключам:

Для профессионалов не существует понятия индексное поле.
Существует только понятие индекс по какому-то полю или поле, по которому задан индекс.
Ключ и индекс - это одно и то же.
Индексов может быть много.
Индекс может быть не только по полю, но и сразу по нескольким полям.
Одно и то же поле может входить сразу в несколько индексов.
Основное назначение индекса - ускорение запросов.
Уникальный ключ - это просто разновидность индекса с доп. функционалом.
Первичный ключ - это просто уникальный индекс, применяемый по дефолту.

fenix_63Задачу ещё усложняет то, что записи,у которых flag = 0 могут дублироваться. Вообще у меня добавление будет сделано вот как: добавляю content: смотрю сначала в какую группу можно записать, т.е. с каким gr. gr - для обозначения группы. По 4 записи в группу. Если в группе 0 записей, вот тогда надо и сделать запись уникальной, т.к. у неё flag будет равен 1, если в группе уже 1,2 или 3 записи есть, то просто добавляю ещё одну запись в таблицу, уже не заботясь об уникальности.

Самое простое и быстрое решение такой задачи вот так:
Код: sql
1.
2.
3.
4.
insert into t 
    select 644, 4, count(*) > 0 
        from a 
        where gr = 644 && flag = 1



fenix_63По 4 записи в группу.
:-)
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вставка уникального значения / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]