SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.04.2018 09:35:24

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Как защититься от дублированные

Добрый день !
У меня код добавляет новую категорию но иногда категорию дублировается как избежать от дублированные
(category 1,23,23)

UPDATE `post` SET `category` = concat(`category`,',','23') WHERE `title` LIKE '%title%'

Отредактированно khalib (05.04.2018 09:40:03)

Неактивен

 

#2 05.04.2018 10:54:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Как защититься от дублированные

1. хранить не вместе через запятую, а по одному значению в строке + уникальный индекс
2. в текущей реализации проверять перед обновлением - есть ли такое значение

Неактивен

 

#3 05.04.2018 11:17:10

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Re: Как защититься от дублированные

UPDATE `post` SET `category` = concat(`category`+'+'+'23') WHERE `title` LIKE '%Title%' ?

Неактивен

 

#4 05.04.2018 11:25:12

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Как защититься от дублированные

не понял смысл последнего сообщения

Неактивен

 

#5 05.04.2018 11:33:45

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Re: Как защититься от дублированные

понятно хотите сказать надо разделить тогда движок будет ругатся

Неактивен

 

#6 05.04.2018 11:38:27

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Re: Как защититься от дублированные

здесь я нашел дублирующиеся строки (23,23)
category FROM post GROUP BY category
можно их сливать в одну

Неактивен

 

#7 06.04.2018 09:30:01

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Re: Как защититься от дублированные

решение оказалось простым

UPDATE post SET category = REPLACE (category, ',16', '') WHERE `title` LIKE '%Title%';
UPDATE post SET category = concat('category' ,',16') WHERE `title` LIKE '%Title%';

Неактивен

 

#8 06.04.2018 16:24:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Как защититься от дублированные

плохое решение:

MariaDB [(none)]> set @cat = '16,22,163';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select @cat;
+-----------+
| @cat      |
+-----------+
| 16,22,163 |
+-----------+
1 row in set (0.00 sec)

MariaDB [(none)]> set @cat = REPLACE (@cat, ',16', '');
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> select @cat;
+--------+
| @cat   |
+--------+
| 16,223 |
+--------+
1 row in set (0.00 sec)

Неактивен

 

#9 07.04.2018 14:36:12

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Re: Как защититься от дублированные

vasya написал:

плохое решение:

MariaDB [(none)]> set @cat = '16,22,163';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select @cat;
+-----------+
| @cat      |
+-----------+
| 16,22,163 |
+-----------+
1 row in set (0.00 sec)

MariaDB [(none)]> set @cat = REPLACE (@cat, ',16', '');
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> select @cat;
+--------+
| @cat   |
+--------+
| 16,223 |
+--------+
1 row in set (0.00 sec)

у меня категории добовляется как (,16) (,22) (,163)

[syntax=mysql]MariaDB [(none)]> set @cat = ',16 ,22, 163';

Неактивен

 

#10 07.04.2018 15:01:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Как защититься от дублированные

khalib написал:

у меня категории добовляется как (,16) (,22) (,163)

значит при исходной записи ',16,22,163' после replace получите ',223' -- всё равно ошибка

Неактивен

 

#11 07.04.2018 17:27:41

khalib
Участник
Зарегистрирован: 05.04.2018
Сообщений: 8

Re: Как защититься от дублированные

vasya написал:

khalib написал:

у меня категории добовляется как (,16) (,22) (,163)

значит при исходной записи ',16,22,163' после replace получите ',223' -- всё равно ошибка

да так  но у меня категории всего 30 для меня потходит
если есть другое решеные я готов узнать

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson