Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: уникальное значение тектового поля как сделать

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
sc2r2bey
Отправлено: 28 Мая, 2012 - 14:14:11
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




Есть таблица в которой есть колонка ailas, например в одной из строк есть знаяение name.
Как сделать так, что при добавлении новой строки дублирующего значения name колонки alias создавалось новое значение name_1,
при очередном дублировании name содавалост name_2 и т.д.
 
 Top
EuGen Администратор
Отправлено: 28 Мая, 2012 - 14:19:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)






-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
sc2r2bey
Отправлено: 28 Мая, 2012 - 14:42:30
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




[quote=EuGen][/quote]это не подходит для строковых значений
 
 Top
EuGen Администратор
Отправлено: 28 Мая, 2012 - 14:45:57
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Чем же не подходит? Вместо "+" используйте CONCAT. Хотя, с другой стороны, перекладывать разбор номера последнего альяса через, например, SUBSTR, на SQL - идея не из лучших.
Оптимальнее сделать действительно в несколько запросов - первым проверить, нет ли совпадения, вторым - найти требуемое значение альяса (если первый запрос вернул, что совпадение есть). И, наконец, вставить новую строку с корректным значением.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
sc2r2bey
Отправлено: 28 Мая, 2012 - 14:48:20
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




[quote=EuGen][/quote]не все так просто, до этого я дошел, но проблема в том, что надо проверить еще дубли дублей, тут я затупил
 
 Top
EuGen Администратор
Отправлено: 28 Мая, 2012 - 15:45:29
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




sc2r2bey
В плане - как найти максимальное значение?
Например,
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `field` FROM `table` WHERE `field` LIKE 'name_%' ORDER BY `id` DESC LIMIT 1

где id - первичный ключ таблицы.
Вообще, подозреваю, что-то не в порядке у Вас с архитектурой.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
sc2r2bey
Отправлено: 28 Мая, 2012 - 15:51:27
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Июль 2009  


Помог: 0 раз(а)




с архитектурой у меня все нормально, мне не нужен SELECT, мне нужен INSERT
 
 Top
tuareg
Отправлено: 28 Мая, 2012 - 16:04:17
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Если есть возможность, добавьте столбик versions int(3) (по умолчанию 0)
по полю `field` индекс
Перед сохранением
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT count(0) FROM `table` WHERE `field` ='name' LIMIT 1;
  3.  

Если count>0;// делаем дубль
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. UPDATE `table` SET versions=versions+1 WHERE FIELD=name;
  3.  

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. INSERT INTO `table`(`name`)  VALUES ('name');
  3.  

А select будет
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT IF(`versions`=0,`field`,CONCAT(`field`,'_',`versions`)) AS myfield FROM `table` WHERE `field`='name';
  3.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB