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 :: Insert только есои такой записи еще нет в таблице

 PHP.SU

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


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

> Без описания
Newy
Отправлено: 29 Сентября, 2011 - 12:51:55
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2011  


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




Здравствуйте. Помогите пожалуйста решить такую задачу:
есть таблица, есть массив данных. В таблицу необходимо вставлять только те строки, которых еще в ней нет.
Планирую реализовать следующим образом: поочередно запрашивать с помощью SELECT есть ли строка с данным id в таблице, если нет, INSERT.
Является ли данный способ допустимым при большом количестве записей для проверки (1000 и больше). Или есть лучшие пути решения?
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2011 - 12:56:52
Post Id



Активный участник


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


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




уникальный индекс + insert ignore + mysqli_affected_rows (mysql_affected_rows для старого драйвера)


-----
PostgreSQL DBA
 
 Top
Newy
Отправлено: 29 Сентября, 2011 - 13:09:54
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2011  


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




Хороший вариант. Вот только когда я пытаюсь создать уникальный индекс возникают проблемы:
Таблица уже существет и заполнена. создаю новый солбец (типа Varchar - он должен содержать как буквы так и цифры) и задаю ему индекс Unique.
ALTER TABLE `network_freerolls` ADD `id_tournament` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `id`
ALTER TABLE `network_freerolls` ADD UNIQUE id_tournament (id_tournament);
В ответ получаю ошибку #1062 - Duplicate entry '' for key 'id_tournament_index'. Я так понимаю она возникает из-за того что столбец на данном этапе содержит повторяющиеся (NULL) значения.
Как решить эту проблему?
 
 Top
Мелкий Супермодератор
Отправлено: 29 Сентября, 2011 - 13:20:23
Post Id



Активный участник


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


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




ID не число у вас? varchar зачем?

Newy пишет:
Как решить эту проблему?

Заполнить таблицу недостающими данными.


-----
PostgreSQL DBA
 
 Top
Newy
Отправлено: 29 Сентября, 2011 - 13:54:43
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2011  


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




varchar - так как мне нужно это поле заполнять данными вида имятурнира_кодтурнира.
 
 Top
Newy
Отправлено: 30 Сентября, 2011 - 13:15:55
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Сент. 2011  


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




Спасибо за помощь, вопрос решен, тему можно закрывать)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB