Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: создание таблиц
 
 автор: pautina   (18.06.2008 в 11:45)   письмо автору
 
 

Здравствуйте Уважаемое сообщество.
У меня к Вам вопрос по участку кода.
В нем создаётся 2 таблицы vopros и var_otveta У меня не получается записать значения в таблицы. Выходит ошибка Duplicate entry '1' for key 1 (двойной вход '1' для клавиши ключа '1'). Как исправить?

<?php
 $a
=mysql_connect("localhost","root","");   
          if(!
$a)   
        { echo 
"Не могу соединится с базой!<br>";   
          echo 
mysql_error();   
          exit;   
        } 
 
mysql_query"CREATE DATABASE vopros" ); 
 
mysql_select_db"vopros");
 
mysql_query("CREATE TABLE vopros (  
                    id_voprosa INT NOT NULL,  
                    name_vopros TINYTEXT NOT NULL,  
                    PRIMARY KEY (id_voprosa)  
                    )"
); 
 
// Создаём таблицу вопросов                 
 
mysql_query("insert into vopros(id_voprosa, name_vopros) values(1, 'Какие из этих видов транспорта передвигаются по земле?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(2, 'Какой из этих предметов по геометрической форме представляет сферу?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(3, 'Кто из нижеперечисленного умеет летать?')") or die (mysql_error());   


// Создаём таблицу ответов
mysql_query("CREATE TABLE var_otveta (  
                    id_var_otveta INT NOT NULL, 
                    id_parent INT NOT NULL,                     
                    var_otveta TINYTEXT NOT NULL,
                    
                    )"
); 
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 1, 'Подводная лодка')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 1, 'Поезд')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 1, 'Самолёт')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(4, 1, 'Дерижабль')") or die (mysql_error());

mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 2, 'Куб')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 2, 'Пирамида')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 2, 'Мяч')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(4, 2, 'Конус')") or die (mysql_error());

mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 3, 'Птица')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 3, 'Корова')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 3, 'Крокодил')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(4, 3, 'Жираф')") or die (mysql_error());

?>

   
 
 автор: AcidTrash   (18.06.2008 в 12:07)   письмо автору
 
   для: pautina   (18.06.2008 в 11:45)
 

А у вас это запрос
CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL,
)
вообще работает, я имею ввиду с запятой после TINYTEXT NOT NULL ?

   
 
 автор: pautina   (18.06.2008 в 12:48)   письмо автору
 
   для: AcidTrash   (18.06.2008 в 12:07)
 

Вы знаете я использую top server, может с ним это как то связано.
Я и сам думаю что запись в таблицы должна осуществлятся но вот выводится такая ошибка и всё тут. Что делать низнаю.

   
 
 автор: ronin80   (18.06.2008 в 13:14)   письмо автору
 
   для: pautina   (18.06.2008 в 12:48)
 

может я не прав, но вы там (где "Куб") в ключевое поле пытаетесь вставить 1, которое уже присвоено ("Подводная лодка")

id_var_otveta - это же ключевое поле, соответственно не должно быть повторяющихся значений, лучше сделать его AUTOINCREMENT

   
 
 автор: pautina   (18.06.2008 в 13:31)   письмо автору
 
   для: ronin80   (18.06.2008 в 13:14)
 

Давайте попробую такой вариант

...
mysql_query("CREATE TABLE var_otveta (  
                    id_var_otveta INT NOT NULL AUTO_INCREMENT, 
                    id_parent INT NOT NULL,                     
                    var_otveta TINYTEXT NOT NULL                    
                    )"); 
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 1, 'Подводная лодка')") or die (mysql_error());
...

Но что мне тогда писать в values(1, ...) вместо цифр для id_var_otveta

   
 
 автор: AcidTrash   (18.06.2008 в 13:42)   письмо автору
 
   для: ronin80   (18.06.2008 в 13:14)
 

>может я не прав, но вы там (где "Куб") в ключевое поле пытаетесь вставить 1, которое уже присвоено ("Подводная лодка")

Так судя по запросу создания второй таблицы, поле id_var_otveta не является ключевым.

   
 
 автор: pautina   (18.06.2008 в 13:52)   письмо автору
 
   для: AcidTrash   (18.06.2008 в 13:42)
 

Да пусть во 2-ой таблице id_var_otveta будет ключевым,

mysql_query("CREATE TABLE var_otveta (  
                    id_var_otveta INT NOT NULL AUTO_INCREMENT, 
                    id_parent INT NOT NULL,                     
                    var_otveta TINYTEXT NOT NULL,
                    PRIMARY KEY (id_var_otveta)                    
                    )"); 
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(0, 1, 'Подводная лодка')") or die (mysql_error());

Если id_var_otveta AUTO_INCREMENT в values на это место писать 0 или нет

   
 
 автор: AcidTrash   (18.06.2008 в 14:01)   письмо автору
 
   для: pautina   (18.06.2008 в 13:52)
 

Вообще это поле не трогать
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error()); 

   
 
 автор: pautina   (18.06.2008 в 14:10)   письмо автору
 
   для: AcidTrash   (18.06.2008 в 14:01)
 

Сейчас вторая таблица выглядит так

// Создаём таблицу ответов
mysql_query("CREATE TABLE var_otveta (  
                    id_var_otveta INT NOT NULL AUTO_INCREMENT, 
                    id_parent INT NOT NULL,                     
                    var_otveta TINYTEXT NOT NULL,
                    PRIMARY KEY (id_var_otveta)                    
                    )"); 
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Поезд')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Самолёт')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Дерижабль')") or die (mysql_error());

mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Куб')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Пирамида')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Мяч')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Конус')") or die (mysql_error());

mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Птица')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Корова')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Крокодил')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Жираф')") or die (mysql_error());

Но сообщение Duplicate entry '1' for key 1 выводится всё равно от повторяющихся значений поля id_parent я избавится не могу они обеспечивают связь с таблицей 1

   
 
 автор: AcidTrash   (18.06.2008 в 14:25)   письмо автору
 
   для: pautina   (18.06.2008 в 14:10)
 

Вы внимательно мой запрос смотрели
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());  

Во всех запросах на добавление уберите id_var_otveta.

   
 
 автор: pautina   (18.06.2008 в 14:28)   письмо автору
 
   для: AcidTrash   (18.06.2008 в 14:25)
 

Прошу прощения моя вина.

   
 
 автор: pautina   (18.06.2008 в 15:05)   письмо автору
 
   для: pautina   (18.06.2008 в 14:28)
 

Вы знаете сейчас весь код выглядит так

<?php
 $a
=mysql_connect("localhost","root","");   
          if(!
$a)   
        { echo 
"Не могу соединится с базой!<br>";   
          echo 
mysql_error();   
          exit;   
        } 
 
mysql_query"CREATE DATABASE vopros" ); 
 
mysql_select_db"vopros");
 
mysql_query("CREATE TABLE vopros (  
                    id_voprosa INT NOT NULL, 
                    name_vopros TINYTEXT NOT NULL,  
                    PRIMARY KEY (id_voprosa)  
                    )"
); 
 
// Создаём таблицу вопросов                 
 
mysql_query("insert into vopros(id_voprosa, name_vopros) values(1, 'Какие из этих видов транспорта передвигаются по земле?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(2, 'Какой из этих предметов по геометрической форме представляет сферу?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(3, 'Кто из нижеперечисленного умеет летать?')") or die (mysql_error());    


// Создаём таблицу ответов
mysql_query("CREATE TABLE var_otveta (  
                    id_var_otveta INT NOT NULL AUTO_INCREMENT, 
                    id_parent INT NOT NULL,                     
                    var_otveta TINYTEXT NOT NULL,
                    PRIMARY KEY (id_var_otveta)                    
                    )"
); 
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Поезд')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Самолёт')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Дерижабль')") or die (mysql_error());

mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Куб')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Пирамида')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Мяч')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Конус')") or die (mysql_error());

mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Птица')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Корова')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Крокодил')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Жираф')") or die (mysql_error());
 
?>

Данная ошибка Duplicate entry '1' for key 1 (Двойной вход '1' для {ключа} 1)
Всё равно не изчезла. Что делать.
Вы знаете я пробовал коментарить таблицы данная ошибка возникает в участке кода который формирует таблицу вопросов (я закоментарил табл. ответов ошибка осталась, потом закоментарил таблицу вопросов запись осуществилась)
И ещё когда в radmin я стер все значения, после этого запись произошла сразу в 2 таблицах, но только 1 раз, если потом запускать этот же код запись уже не происходит и выдаётся та же ошибка.
Может это как то поможет.

   
 
 автор: ronin80   (18.06.2008 в 15:54)   письмо автору
 
   для: pautina   (18.06.2008 в 15:05)
 

можете показать show create table этих таблиц (соответственно после их создания) ?

возможно создан индекс unique по внешнему ключу

   
 
 автор: AcidTrash   (18.06.2008 в 17:49)   письмо автору
 
   для: pautina   (18.06.2008 в 15:05)
 

>И ещё когда в radmin я стер все значения, после этого запись произошла сразу в 2 таблицах, >но только 1 раз, если потом запускать этот же код запись уже не происходит и выдаётся та >же ошибка.


Так правильно, вы пытаетесь повторным запуском скрипта создать туже базу, теже таблицы, и тд, но они уже есть с предыдущего запуска скрипта. Вот и выдается такая ошибка

   
 
 автор: pautina   (19.06.2008 в 09:37)   письмо автору
 
   для: AcidTrash   (18.06.2008 в 17:49)
 

Оказывается везде при создании таблиц БД всегда для полей id_name лучше использовать PRIMARU KEY и AUTO_INCREMENT.
Теперь у меня есть БД и 2 таблицы, у меня возник такой вопрос как вытащить название вопроса (поле name_vopros таблицы vopros БД useropros)
Я использовал следующий код

<?php
$a
=mysql_connect("localhost","root","");   
          if(!
$a)   
        { echo 
"Не могу соединится с базой!<br>";   
          echo 
mysql_error();   
          exit;   
        } 
mysql_select_db"useropros");
$w=mysql_query("select name_vopros from vopros where id_voprosa=1");
//print_r(mysql_fetch_row($w));
//print_r(mysql_fetch_assoc($w)); 
//print_r(mysql_fetch_array($w));  
//print_r(mysql_result($w));
print_r(mysql_fetch_object($w))
?>

Пробовал такие варианты вывода, Но выводится не то, хотелось сделать просто вывод ответа.

   
 
 автор: pautina   (19.06.2008 в 11:28)   письмо автору
 
   для: pautina   (19.06.2008 в 09:37)
 

Извините нужно было писать вот так
print_r(mysql_result($num_vopr,0));

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования