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]   

> Описание: Mysql, оператор INSERT
Иван14
Отправлено: 01 Ноября, 2011 - 07:25:50
Post Id



Гость


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


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




здавствуйте коллеги! ;)
подскажите пожалуйста как решить след задачу именно через mysql:
PHP:
скопировать код в буфер обмена
  1.  
  2. $result =mysql_query('SELECT MAX(id) AS MaxId,
  3.                                 FROM regions');
  4.      if($result && mysql_num_rows($result)>0){
  5.              $row = mysql_fetch_array($result);
  6.         }
  7.         $id = $row['MaxId'] + 1;
  8.        
  9.  
  10.      $result  = mysql_query('INSERT INTO regions(title,id,district_id)
  11.                                  VALUES("'.$_POST['name_region'].'",
  12.                                         '.$id.',
  13.                                         '.$_POST['selected_district'].')');
  14.      if(!$result) {
  15.                 $this->ERROR_MESSAGE = 'В данном округе регион с таким названием уже существует';
  16.                
  17.      }

собственно код говорит сам за себя. автоинкремент на id я не ставлю, мне так удобней, поэтому и я пользуюсь первым запросом для того чтобы вставить нужный id.
проблема в том, что у меня вставляются записи в таблицу даже если у меня есть одинаковые поля title. мне нужно это как-то отключить.
а именно задача: запретить вставлять поля, если поле title с таким именем уже существует.
буду рад помощи!
 
 Top
Опоссум
Отправлено: 01 Ноября, 2011 - 07:37:16
Post Id



Новичок


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


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




Попробуй сделать это средствами PHP а не MqSql.
Т.е. делай в начале проверку на уникальность title

$query = mysql_query("SELECT * FROM table WHERE title ='Какой то title' LIMIT 1");
if (mysql_num_rows($query) == 0) {

Выполняем INSERT


}
 
 Top
Мелкий Супермодератор
Отправлено: 01 Ноября, 2011 - 07:54:20
Post Id



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


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


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




0) используйте автоинкремент.
1) поставьте уникальный индекс на title


-----
PostgreSQL DBA
 
 Top
Иван14
Отправлено: 01 Ноября, 2011 - 08:03:11
Post Id



Гость


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


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




Мелкий,
а без 0) никак?
 
 Top
EuGen Администратор
Отправлено: 01 Ноября, 2011 - 08:20:36
Post Id


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


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


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




Иван14
auto_increment можно выставить только для PRIMARYуникального ключа (хотя он и может быть многоколоночным).
Стало быть, имелось ввиду "или".


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 01 Ноября, 2011 - 08:51:23
Post Id



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


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


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




Иван14, в этом случае - пункты между собой не связаны.

EuGen пишет:
auto_increment можно выставить только для PRIMARY ключа (хотя он и может быть многоколоночным).

Ой ли Подмигивание
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `testai` (
  2. `id` INT NOT NULL ,
  3. `ai` INT NOT NULL AUTO_INCREMENT ,
  4. `value` VARCHAR( 20 ) NOT NULL ,
  5. PRIMARY KEY ( `id` ) ,
  6. UNIQUE (
  7. `ai`
  8. )
  9. ) ENGINE = InnoDB;

автоинкремент должен быть уникален. А PK - не обязателен.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 01 Ноября, 2011 - 09:20:34
Post Id


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


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


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




Разумеется имелось ввиду UNIQUE. Видимо, думаю о другом.
Мелкий пишет:
А PK - не обязателен.

Нет. PK всегда уникален.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 01 Ноября, 2011 - 09:23:14
Post Id



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


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


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




EuGen пишет:
Нет. PK всегда уникален.

Для работы AI быть ему PK необязательно, я об этом.

Но он должен быть уникален - обязан входить в PK или unique индекс.


-----
PostgreSQL DBA
 
 Top
EuGen Администратор
Отправлено: 01 Ноября, 2011 - 09:26:52
Post Id


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


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


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




Мелкий пишет:
Но он должен быть уникален - обязан входить в PK или unique индекс.

входить и быть уникальным - разные вещи.
Пример:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE animals (
  2.     grp ENUM('fish','mammal','bird') NOT NULL,
  3.     id MEDIUMINT NOT NULL AUTO_INCREMENT,
  4.     name CHAR(30) NOT NULL,
  5.     PRIMARY KEY (grp,id)
  6. ) ENGINE=MyISAM;
  7.  
  8. INSERT INTO animals (grp,name) VALUES
  9.     ('mammal','dog'),('mammal','cat'),
  10.     ('bird','penguin'),('fish','lax'),('mammal','whale'),
  11.     ('bird','ostrich');
  12.  
  13. SELECT * FROM animals ORDER BY grp,id;

Итог:
PHP:
скопировать код в буфер обмена
  1. +--------+----+---------+
  2. | grp    | id | name    |
  3. +--------+----+---------+
  4. | fish   |  1 | lax     |
  5. | mammal |  1 | dog     |
  6. | mammal |  2 | cat     |
  7. | mammal |  3 | whale   |
  8. | bird   |  1 | penguin |
  9. | bird   |  2 | ostrich |
  10. +--------+----+---------+

- именно это я и имел ввиду
EuGen пишет:
(хотя он и может быть многоколоночным).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 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