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
Форумы портала PHP.SU :: Версия для печати :: запрет на вставку поля с уже существующим именем
Форумы портала PHP.SU » » Работа с СУБД » запрет на вставку поля с уже существующим именем

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

1. Иван14 - 01 Ноября, 2011 - 07:25:50 - перейти к сообщению
здавствуйте коллеги! ;)
подскажите пожалуйста как решить след задачу именно через 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 с таким именем уже существует.
буду рад помощи!
2. Опоссум - 01 Ноября, 2011 - 07:37:16 - перейти к сообщению
Попробуй сделать это средствами PHP а не MqSql.
Т.е. делай в начале проверку на уникальность title

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

Выполняем INSERT


}
3. Мелкий - 01 Ноября, 2011 - 07:54:20 - перейти к сообщению
0) используйте автоинкремент.
1) поставьте уникальный индекс на title
4. Иван14 - 01 Ноября, 2011 - 08:03:11 - перейти к сообщению
Мелкий,
а без 0) никак?
5. EuGen - 01 Ноября, 2011 - 08:20:36 - перейти к сообщению
Иван14
auto_increment можно выставить только для PRIMARYуникального ключа (хотя он и может быть многоколоночным).
Стало быть, имелось ввиду "или".
6. Мелкий - 01 Ноября, 2011 - 08:51:23 - перейти к сообщению
Иван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 - не обязателен.
7. EuGen - 01 Ноября, 2011 - 09:20:34 - перейти к сообщению
Разумеется имелось ввиду UNIQUE. Видимо, думаю о другом.
Мелкий пишет:
А PK - не обязателен.

Нет. PK всегда уникален.
8. Мелкий - 01 Ноября, 2011 - 09:23:14 - перейти к сообщению
EuGen пишет:
Нет. PK всегда уникален.

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

Но он должен быть уникален - обязан входить в PK или unique индекс.
9. EuGen - 01 Ноября, 2011 - 09:26:52 - перейти к сообщению
Мелкий пишет:
Но он должен быть уникален - обязан входить в 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 пишет:
(хотя он и может быть многоколоночным).

 

Powered by ExBB FM 1.0 RC1