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 :: mysql_query SELECT and INSERT
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
Здравствуйте, возможно ли сделать так, чтобы одной строкой проверить данные из бд и в случае, если таких данных нет, добавить их?
Допустим, есть переменная $name и ей присвоено значение 'Игорь'. Требуется, проверить наличие значения переменной $name в базе данных mysql, если совпадения не найдены, то добавить новую запись.
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
garvey
Отправлено: 23 Марта, 2011 - 10:05:33
Частый посетитель
Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010 Откуда: Minsk
Помог: 3 раз(а)
Как я понял, поле NAME у вас уникальное? Тогда в чем проблема? MySQL не позволит записать в базу 2 записи с одинаковым значением для уникального поля.
Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010 Откуда: Minsk
Помог: 3 раз(а)
Странно, что не уникальное. У вас поведение идентичное поведению уникального поля. Есть такое - не добавляем, нету - добавляем. Или это только в одном месте, а в других можно записать с таким именем?
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
garvey, допустим, будут еще поля типа фамилии и отчества и потребуется, чтобы все 3 значения фамилия имя и отчество не совпадали с предлагаемыми данными из переменных. Тогда уникальные, будут бесполезны т.к. если друг у одного человека имя "Игорь" и Ф.О разные и тут же встречается еще один "Игорь", то второго Игоря и не добавит.
Что в таком случае? Какой должен быть запрос?
Степаненко Игорь Владимирович и Смирнов Игорь Владимирович (2 разных человека и они хотят быть в базе данных и Ф.И.О. должны храниться отдельно)
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
garvey, не работает и не очень понятно как оно вообще работает.
Оператор NOT EXISTS работает так же, как и оператор EXISTS, за исключением того, что предложение WHERE, в котором используется этот оператор, выполняется, если вложенный запрос не возвращает ни одной строки. (Добавление)
Пробую:
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
DeepVarvar
Отправлено: 23 Марта, 2011 - 12:10:21
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
LEONeso
Даже если у тебя получится все включить в один запрос.
Как ты будешь говорить юзеру о том что сохранение не произошло по причине существования идентичных данных?
По мне так правильнее сделать запрос на проверку.
Если такие данные есть - вывести сообщение об ошибке добавления.
Если нет - добавить данные и вывести сообщение об успешном добавлении.
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
DeepVarvar, за чем мне писать самому себе то, что мне не надо?
Если я делаю первый запрос проверяя есть ли запись в бд, потом еще запрос (запись данных) и это все повторяется 50000+ раз, у меня вылетает ошибка... время работы превышено 30с или же ошибка 500.
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
Мелкий
Отправлено: 23 Марта, 2011 - 12:27:13
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
Как ты будешь говорить юзеру о том что сохранение не произошло по причине существования идентичных данных?
Значит, ругается парсер SQL. На что ругается - скажет mysql_error. Вероятно, на всю конструкцию where.
LEONeso пишет:
допустим, будут еще поля типа фамилии и отчества и потребуется, чтобы все 3 значения фамилия имя и отчество не совпадали с предлагаемыми данными из переменных. Тогда уникальные, будут бесполезны т.к. если друг у одного человека имя "Игорь" и Ф.О разные и тут же встречается еще один "Игорь", то второго Игоря и не добавит.
MySQL поддерживает уникальные индексы по нескольким полям одновременно. И отсеивать будет только совпадение по всем входящим в индекс полям.
Другое дело, что относительно ФИО уникальность недопустима, т.к. существуют люди с полностью совпадающими ФИО.
----- PostgreSQL DBA
LEONeso
Отправлено: 23 Марта, 2011 - 13:53:37
Посетитель
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.