Перейти к содержимому


- - - - -

Помощь с INSERT ... SELECT ...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 GoldenPower

GoldenPower
  • Пользователь

  • Пользователь
  • 447 сообщений
  • Пол:Мужчина

Отправлено 27.04.2010 - 20:06

Есть следующий код. Таблицу создаёт нормально, но вот заполнять её не хочет. Где ошибка? Подозреваю, что неправильно написан INSERT ... SELECT. Нужно, что бы в созданную таблицу в первый столбец вставлялись записи из трёх столбцов другой таблицы, причём выбирались те записи значения четвёртого столбца которых, равны вводимому.
$sql = "CREATE TABLE `mydb`.`".$_POST['klass']." ".$_POST['predmet']."` (`fio` VARCHAR( 30 ) CHARACTER SET cp1251 COLLATE cp1251_bin NOT NULL, PRIMARY KEY ( `fio` )) ENGINE = MYISAM CHARACTER SET cp1251 COLLATE cp1251_bin;";
$result = mysql_query($sql) or die("Ошибка");
echo "Таблица ".$_POST['klass']." ".$_POST['predmet']." добавлена!<br><a href='1.php'>Просмотр</a><br>";
$sqls = "INSERT INTO `".$_POST['klass']." ".$_POST['predmet']."` SELECT * FROM ycheniki WHERE klass = `".$_POST['klass']."`;";
$results = mysql_query($sqls) or die("Ошибка");
echo "Таблица ".$_POST['klass']." ".$_POST['predmet']." заполнена!<br><a href='1.php'>Просмотр</a>";
}


#2 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 27.04.2010 - 21:31

А описание таблицы ycheniki где? подозреваю, что в ней больше 1 столбца  :)
Вы пытаетесь вставить много столбцов в таблицу, имеющую только 1 столбец. Ест-сно, такая операция невозможна :-)

И писать 2 раза CHARACTER SET cp1251 COLLATE cp1251_bin тоже совершенно лишнее :-)

#3 GoldenPower

GoldenPower
  • Пользователь

  • Пользователь
  • 447 сообщений
  • Пол:Мужчина

Отправлено 27.04.2010 - 21:55

Просмотр сообщенияpahan76 (27 Апреля 2010, 22:31) писал:

А описание таблицы ycheniki где? подозреваю, что в ней больше 1 столбца  :)
Вы пытаетесь вставить много столбцов в таблицу, имеющую только 1 столбец. Ест-сно, такая операция невозможна :-)

И писать 2 раза CHARACTER SET cp1251 COLLATE cp1251_bin тоже совершенно лишнее :-)
Да, в таблице "ycheniki" 5 столбцов.
Т.е. вставить содержимое трёх ячеек в одну другой таблицы получается невозможно?

#4 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 28.04.2010 - 08:56

Не, ну все не так страшно :-) есть же функция склейки строк :-)
$sqls = "INSERT INTO `".$_POST['klass']." ".$_POST['predmet']."` SELECT CONCAT(Stolbets1," ",Stolbets2," ",Stolbets3) FROM ycheniki WHERE klass = `".$_POST['klass']."`;"

Сообщение отредактировал pahan76: 28.04.2010 - 09:04


#5 GoldenPower

GoldenPower
  • Пользователь

  • Пользователь
  • 447 сообщений
  • Пол:Мужчина

Отправлено 28.04.2010 - 10:49

Просмотр сообщенияpahan76 (28 Апреля 2010, 9:56) писал:

Не, ну все не так страшно :-) есть же функция склейки строк :-)
$sqls = "INSERT INTO `".$_POST['klass']." ".$_POST['predmet']."` SELECT CONCAT(Stolbets1," ",Stolbets2," ",Stolbets3) FROM ycheniki WHERE klass = `".$_POST['klass']."`;"
Работает только если убрать
WHERE klass = `".$_POST['klass']."`
Может в синтаксисе где ошибка?
Полная строчка
$sqls = "INSERT INTO `".$_POST['klass']." ".$_POST['predmet']."` SELECT CONCAT(fam,' ',imya,' ',otch) FROM ycheniki WHERE klass = `".$_POST['klass']."`;";


#6 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 28.04.2010 - 11:15

; в конце вообще-то не нужна. Она нужна только если пытаться скормить одним вызовом mysql_query несколько запросов.
Символ ` в WHERE надо заменить на '
` нужен когда вы пытаетесь создать какой-то объект, имя которого - зарезервированное слово в SQL. И нужен он только для обхода этого ограничения.
Какую-то конкретную ошибку MySQL выдает или просто ничего не отображает?

#7 GoldenPower

GoldenPower
  • Пользователь

  • Пользователь
  • 447 сообщений
  • Пол:Мужчина

Отправлено 28.04.2010 - 11:49

Просмотр сообщенияpahan76 (28 Апреля 2010, 12:15) писал:

; в конце вообще-то не нужна. Она нужна только если пытаться скормить одним вызовом mysql_query несколько запросов.
Символ ` в WHERE надо заменить на '
` нужен когда вы пытаетесь создать какой-то объект, имя которого - зарезервированное слово в SQL. И нужен он только для обхода этого ограничения.
Какую-то конкретную ошибку MySQL выдает или просто ничего не отображает?
; нужна, без неё не работает. Насколько я понимаю первой закрываем сам запрос INSERT, тот что в кавычках, а второй закрываем всю строку.
СПАСИБО! Всё заработало, заменил в WHERE ` на '.

#8 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 28.04.2010 - 14:01

Вот первая-то (в конце SQL-запроса) и не нужна, если не пытаться послать несколько запросов за один вызов функции. А в конце PHPшной строки должна быть.
Читайте коменты здесь
http://docs.php.net/...mysql-query.php

#9 Marina kr

Marina kr
  • Новичок

  • Пользователь
  • 19 сообщений
  • Пол:Не определился

Отправлено 14.08.2017 - 04:24

Имеется таблица foo, типа
idbar1bar2bar311226ololo21227ololo31228ololo
Существует ли такой функционал типа
INSERT INTO foo id, bar1, bar2, bar3 VALUES NULL, 12, 29, ololo WHERE bar112 AND bar229 Сообщение




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей